再一次将PrimeFaces和GAE结合在一起让我抓狂。在p:dataTable
中,我想单击图像,调用bean方法并设置参数。方法被调用,但参数不起作用。下面是一个简化的示例(没有表):
<h:form id="f1">
<h:outputText id="text" value="#{testBean.index}"/>
<h:graphicImage url="/images/cut.png">
<p:ajax event="click" process="@this" update="text"
actionListener="#{testBean.test}" >
<f:setPropertyActionListener target="#{testBean.index}" value="5" />
</p:ajax>
</h:graphicImage>
</h:form>
我的TestBean
看起来像这样:
@javax.faces.bean.ManagedBean @ViewScoped
public class TestBean implements Serializable{
private int index; // getter/setter
@PostConstruct public void init() {
index = 0;log.log(Level.WARNING, "@PostConstruct");}
public void test(ActionEvent ae){
log.log(Level.WARNING, "Index: "+index);}
}
在日志中,我看到一个@PostConstruct
,点击图像后总是Index: 0
Update值更新问题可以在这里讨论JSF GAE:托管bean方法中的值更新问题
我不太了解GAE,所以我不能假设它不会以某种方式干扰您的代码。但是,我不一定认为<f:setPropertyActionListener>
是用于<p:ajax>
标签的合适标签。我不相信它会接受。
下面是我如何使用<p:commandLink>
和HTML <span>
标记实现对viewscoped bean属性的ajax调用的示例。
<p:commandLink actionListener="#{listUsers.toModify}" oncomplete="userEditDlg.show()"
update="addEditForm:editGrid addEditGrid:passwordChange addEditGrid:passwordGrid">
<f:param name="userId" value="#{user.userId}" />
<span class="ui-icon icoCogEdit" style="padding-right: 1.5em;" />
</p:commandLink>
<p:commandLink actionListener="#{listUsers.toDelete}" oncomplete="userDelDlg.show()"
update="listUsersForm:dialogText">
<f:param name="userId" value="#{user.userId}"/>
<span class="ui-icon icoDelete" />
</p:commandLink>
我只是将CSS类设置为我选择的静态图像图标,然后单击它将调用一个对话框