1

コマンドリンクのデータテーブルタグから、以下の形式のコンポーネントid=contractIdInputTextを参照したいと思います。@allの代わりにrender属性でそのIDを使用したいと思います。以下の@allを使用したのは、IDを参照できなかったためです。データテーブルはタグの外側と上にあります。

<h:form id="contracts">
   <h:outputScript library="js" name="common.js" target="head"/>
   <h:panelGrid columns="3"   columnClasses="rightalign,leftalign,leftalign">

   <h:outputLabel for="contractIdInputText" rendered="true" value="Contract Nooo.: " />
   <h:inputText id="contractIdInputText" required="true"                                         value="#contractManager.newContractId}" />
</form>

これは、データテーブルのコマンドリンクです。

 <h:commandLink id="editLink" value="#{bundle.ListUnitEditLink}" 
     action="#{contractManager.updateContract}">
     <f:ajax onevent="disablePK" render="@all" />
 </h:commandLink>

リンク内のajaxの全体的な目的は、コマンドリンクをクリックしてフォームに入力したときにフォームコンポーネントを無効にすることです。また、@ allを使用すると(inputTextを無効にしてフォームに入力する)、データテーブル内のコマンドリンクでコマンドリンクを2回クリックして、フォームに別のフォームを入力する必要があることに気付きました。アイテム。なぜこうなった?

4

1 に答える 1

1

それらが同じNamingContainer親にない場合は、(無効な) 相対クライアント ID ではなく絶対クライアント ID で他のコンポーネントを参照する必要があります。絶対クライアント ID は、(生成された HTML 出力で確認できるように) 完全なクライアント ID であり、名前付けコンテナー区切り文字 (デフォルトでは ) が前に付き:ます。

だから、これはすべきです

<f:ajax ... render=":contracts:contractIdInputText" />

<form id="contracts">(が別の親に含まれていないと仮定するとNamingContainer、生成された HTML 出力を確認してください)

コマンド リンクを 2 回クリックする必要がある理由については、JSF 仕様の問題 790に関連している可能性が最も高いです。修正は、他のフォームを明示的に に含めることrenderです。他のフォームを含むコンテンツの Ajax レンダリングも参照してください。

于 2012-08-08T11:17:34.057 に答える