【问题标题】:Google App Engine: f:setPropertyActionListener with p:ajaxGoogle App Engine:带有 p:ajax 的 f:setPropertyActionListener
【发布时间】:2011-09-08 11:05:45
【问题描述】:

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

更新这里可以讨论值更新问题JSF GAE: Value Update Problem in managed bean method

【问题讨论】:

    标签: java google-app-engine jsf primefaces


    【解决方案1】:

    我对 GAE 了解不多,所以我不能假设它不会以某种方式干扰您的代码。但是,我不一定认为&lt;f:setPropertyActionListener&gt; 是用于&lt;p:ajax&gt; 标签的合适标签。我不相信它会接受。

    这是我如何使用&lt;p:commandLink&gt; 和 HTML &lt;span&gt; 标记实现对 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 类设置为我选择的静态图像图标,然后单击它会调用一个对话框。

    【讨论】:

    • 澄清:&lt;f:setPropertyActionListener&gt; 仅在实现 ActionSource 的父组件上受支持。 &lt;h:graphicImage&gt; 没有。然而,有趣的细节是,当您使用&lt;f:ajax&gt; 而不是&lt;p:ajax&gt; 时,会引发异常,并带有该消息。顺便说一下,&lt;span&gt; 也可以替换为所需的&lt;h:graphicImage&gt;。顺便说一下,&lt;f:setPropertyActionListener&gt;&lt;p/h:commandLink&gt; 中的&lt;f:param&gt; 一样可以正常工作。
    • @BalusC,我没有意识到这一点并学到了一些新东西,但如果你仔细观察,你会发现&lt;f:setPropertyActionListener&gt; 实际上是在&lt;p:ajax&gt; 标签内,缩进很奇怪.这是很好的信息。
    • &lt;f:xxx&gt; 不能是另一个 &lt;f:xxx&gt; 的子代。它只是父级UIComponent 的子级。
    • 感谢您指出这一点。我已经用价值更新的问题更新了这个问题。不久前我在使用 RichFaces 时遇到过类似的问题,但我的搜索并没有为我提供任何解决方案。
    猜你喜欢
    • 2017-11-17
    • 2017-01-10
    • 2011-01-22
    • 2010-11-13
    • 1970-01-01
    • 2023-03-20
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多