JSF p:commandLink和p:ajax在更新中有不同的行为

时间:2012-10-29 14:55:40

标签: java ajax jsf-2 primefaces

我有一个包含列表项的菜单,里面有一个p:commandLink。在不同页面使用此功能时,我意识到我在使用p:dataTablep:columns更新表单时遇到问题。点击链接后,form2实际上有一些面板和里面的表应该更新。现在我的问题是:form2中只有大多数内容已正确更新,但p:columns具有值。如果我再次点击链接,则会显示正确的值。

正确调用bean方法public void selectProject(Project myProject)并正确处理值。

现在奇怪的是:如果我用h:graphicImage添加p:ajax,一切正常!!

<h:form id="form1">
  ...
  <li>
    <p:commandLink update=":form2" actionListener="#{bean.selectProject(p)}">  
      <h:outputText value="#{p.name}" />
    </p:commandLink>
    <!-- Code below is for testing only, but works fine! -->
    <h:graphicImage value="#{iconBean.icon(12,'clock')}">
      <p:ajax event="click" update=":form2" listener="#{bean.selectProject(p)}"/>
    </h:graphicImage>
  </li>
  ...
</h:form>

更新这似乎与p:columns无关,简化的测试用例会显示p:commandLink的预期行为。在原始(仍然失败)设置中,菜单实现为复合组件。

1 个答案:

答案 0 :(得分:2)

作为一种解决方法,我使用

<h:commandLink>
  <h:outputText value="#{p.name}"/>
  <p:ajax event="click" update=":form2" listener="#{bean.selectProject(p)}"/>
</h:commandLink>