1

我有<h:dataTable>一个<h:commandLink>在一个列中,一个<h:outputext><h:dataTable>我需要通过命令链接呈现的外部。

<h:form>
       <h:dataTable value="#{userControl.lista}" var="c">

           <h:column>
               <f:facet name="header" >
                   <h:outputText styleClass="leftColumn" value="Nombre"/>
               </f:facet>
                    #{c.nombre}
           </h:column>

           <h:column>
               <f:facet name="header" >
                   Usuario
               </f:facet>
               <h:commandLink actionListener="#{userControl.setAdmin_user(c.user)}" value="#{c.user}">
                    <f:ajax  render="output" />
               </h:commandLink>                  
           </h:column>       

       </h:dataTable>


       <h:outputText id="output" value="#{userControl.admin_user}"/>
</h:form>

这没用。如果我<h:outputText>在同一列内移动,那么它可以工作。

这是如何引起的,我该如何解决?

4

1 回答 1

4

您当前在 中的客户端 ID<f:ajax render>不以默认NamingContainer分隔符开头,:因此与当前 NamingContainer组件相关,在您的情况下为<h:dataTable>. 所以它只有在 outputtext 组件也在同一个数据表中时才会起作用。

您需要通过绝对客户端 ID 来引用 outputtext 组件。对于还没有记住所有NamingContainer组件的初学者,最简单的方法是id在 webbrowser 中检查生成的 HTML 元素的属性。在 webbrowser 中打开页面并执行View Source并找到由<span>生成的元素<h:outputText id="output">并准确获取此 ID 并为其添加前缀:以使其绝对到视图根。

例如

<span id="formId:output">

对于输出文本包含在 a 中的情况,其中formId是 any 的 ID 。如果您没有为 指定一个固定的 ID ,那么 JSF 将自动生成一个。您想指定一个固定 ID,然后喜欢.<h:form><h:form><h:form><h:form id="formId">

所以<f:ajax render>应该看起来像这样

<f:ajax render=":formId:output" />
于 2012-06-07T16:49:09.137 回答