【问题标题】:How to render a component outside datatable by ajax?如何通过ajax渲染数据表之外的组件?
【发布时间】:2012-06-11 18:05:42
【问题描述】:

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

<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>

它不起作用。如果我将&lt;h:outputText&gt; 移动到同一列中,那么它可以工作。

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

【问题讨论】:

    标签: ajax jsf-2 datatable


    【解决方案1】:

    您当前在 &lt;f:ajax render&gt; 中拥有的客户端 ID 不是以默认的 NamingContainer 分隔符 : 开头,因此相对于 当前 NamingContainer 组件,即在你的情况下&lt;h:dataTable&gt;。所以只有当 outputtext 组件也在同一个数据表中时才会起作用。

    您需要通过绝对客户端 ID 来引用 outputtext 组件。对于尚未记住所有NamingContainer 组件的初学者,最简单的查找方法是检查webbrowser 中生成的HTML 元素的id 属性。在 webbrowser 中打开页面并执行 查看源代码 并找到由 &lt;h:outputText id="output"&gt; 生成的 &lt;span&gt; 元素并准确获取此 ID 并在其前面加上 : 前缀以使其绝对 到视图根目录。

    例如

    <span id="formId:output">
    

    其中formId 是任何&lt;h:form&gt; 的ID,如果输出文本包含在&lt;h:form&gt; 中。如果您没有为&lt;h:form&gt; 指定一个固定ID,那么JSF 将自动生成一个。您想指定一个固定 ID,然后像 &lt;h:form id="formId"&gt;

    所以&lt;f:ajax render&gt; 应该是这样的

    <f:ajax render=":formId:output" />
    

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多