Google App Engine: f:setPropertyActionListener with p:ajax



再一次将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类设置为我选择的静态图像图标,然后单击它将调用一个对话框

相关内容

  • 没有找到相关文章

最新更新