【问题标题】:Cannot update a componet from p:commandLink 'update' attribute,the Link is persent in p:dataTable [duplicate]无法从 p:commandLink 'update' 属性更新组件,链接存在于 p:dataTable [重复]
【发布时间】:2011-11-18 14:35:00
【问题描述】:
<p:dataTable id="id" value="#{bean.soemList}" var="account">
    <p:commandLink value="#{account.id}" action="#{bean.methodCall}" 
        update="dialogID" oncomplete="dlg1.show();">
    </p:commandLink>

...

<p:dialog header="#{i18n.details}" widgetVar="dlg1" modal="true" height="200" width="600">
    <h:panelGroup id="dialogID" layout="block">
        <h:outputLabel value="#{bean.var1}"></h:outputLabel>
    </h:panelGroup>
</p:dialog>

当链接在p:dataTable 之外时p:dialog 会更新,但是当链接放在p:dataTable 中时,p:dialog 不会显示更新的值。我需要将链接保留在p:dataTable 中。要更新的组件不在dataTable 中。

【问题讨论】:

  • 你能发布你的 bean.methodCall 代码吗?我有同样的问题
  • @SfsLearner :在 bean 方法中,我只是在更改变量的值。更改后的值应该显示在 p:dialog 内的 h:outputLabel 中,但问题是它仍然显示旧值而不是新值。但是它改变了bean方法中变量的值,但新值没有反映在页面上。公共字符串 methodCall(){ this.var1=true; } 在这种情况下,方法调用后页面仍然显示'false'

标签: jsf-2 primefaces


【解决方案1】:

您好,您是否尝试按如下方式附加表单 ID

<form id="myformid">
.....
    <p:commandLink value="#{account.id}" action="#{bean.methodCall}" update=":myformid:dialogID" oncomplete="dlg1.show();">
    </p:commandLink>
....
<p:dialog header="#{i18n.details}" widgetVar="dlg1" modal="true"
        height="200" width="600">
        <h:panelGroup id="dialogID" layout="block">
        <h:outputLabel value="#{bean.var1}"></h:outputLabel>
....
</form>

希望对你有帮助!

【讨论】:

    【解决方案2】:

    如果对话框的元素在它们自己的&lt;h:form&gt; 中,我只能在dataTable 中将&lt;p:commandLink&gt; 获取到对话框的组件update

    例子:

    <p:dialog appendToBody="true" ...>
      <h:form id="dialogForm" ...>
        ...
      </h:form>
    </p:dialog>
    
    <p:dataTable ...>
      <h:form id="dataTableForm" ...>
        ...
      </h:form>
    </p:dataTable>
    

    还请注意,我在对话框中添加了属性appendToBody="true"。这对于在 AJAX 更新后按 id 定位对话框很重要。

    【讨论】:

    • 嗨 maple,感谢您的回复.. 在我的代码中.. p:dataTable 和 p:dialog 存在于常见的
      标记中..
    • @Amruta,是的,不要那样做。重构为每个对话框提供自己的内部形式,并为页面上的其他组件提供一种通用形式。还记得应用appendToBody="true" 标签。
    • 当我使用 ':mainFormId:idOfThePanelCantainingDialog' 时,它起作用了。我没有使用单独的表单。感谢您的回复 n e 方式:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2011-06-02
    • 2013-02-19
    • 1970-01-01
    • 2012-08-08
    • 2012-10-24
    • 2014-08-11
    相关资源
    最近更新 更多