1

I have a <h:dataTable> with a <h:commandLink> in a column and a <h:outputext> outside the <h:dataTable> which I need to render by the command link.

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

It does not work. If I move the <h:outputText> inside the same column, then it works.

How is this caused and how can I solve it?

4

1 に答える 1

4

現在 にあるクライアント ID は、デフォルトの区切り文字<f:ajax render>で始まらないため、現在のコンポーネント (この場合は. したがって、outputtext コンポーネントも同じデータテーブルにある場合にのみ機能します。NamingContainer: NamingContainer<h:dataTable>

代わりに、絶対クライアント ID で outputtext コンポーネントを参照する必要があります。まだすべてのコンポーネントを覚えていない初心者にとってNamingContainer、それを見つける最も簡単な方法はid、Web ブラウザーで生成された HTML 要素の属性を確認することです。webbrowser でページを開き、View Source<span>を実行して、によって生成された要素を見つけ、<h:outputText id="output">正確にこの ID を取得し、接頭辞を付けて、ビュー ルート:絶対的なものにします。

例えば

<span id="formId:output">

出力テキストが で囲まれている場合、はformIdany の ID です。の固定 ID を指定していない場合は、JSF が ID を自動生成します。固定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 に答える