jsf2 と richfaces 4.X を使用していますが、richfaces が有効な入力フィールドの現在の値を取得するにはどうすればよいですか? getElementById('field_name').vlue と等しい
findcomponent.value や element.value などの名前のメソッドをいくつか試してみましたが、ページがロードされていたときに古い値が返されました。
rich:clientId
関数を使用して、正しい識別子をJavaスクリプトにレンダリングする必要があると思います。
例えば:
var myElement = document.getElementById("#{rich:clientId('field_name')}");
ファセット内のRichFacesrich:clientIdも参照してください。
生成された HTML を確認すると、すべての JSF / RF 要素に : のような ID があることがわかります。例えば:
<h:form id="frmSample">
<h:inputText id="txtSample" value="#{mybean.someTextValue}" />
</h:form>
生成される HTML は次のようになります。
<form method="POST">
<input type="text" id="frmSample:txtSample" />
</form>
したがって、JavaScript では、この ID で要素を参照できます。
var txtValue = document.getElementById('frmSample:txtSample').value;
rich:tab
また、またはのような RF 複合 HTML コンポーネントについては、rich:calendar
HTML によって生成されたコンポーネント ID を使用できますが"#{rich:clientId('field_name')}"
、@DRCB が彼の投稿で説明しているように、お勧めします。
richfacesコンポーネントの値を取得するには、rich:componentメソッドとgetValue()メソッドを使用します。
jsfライブラリコンポーネントの値を取得するには、rich:elementメソッドとvalueJSメソッドを使用します。
例:
<h:form>
<h:inputText id="textField" value="#{bean.value1}" />
<a4j:commandButton value="displayTextField" action="doSomething()"
onclick="alert('v:'+ #{rich:element('textField')}.value); return true;" />
<rich:inplaceInput id="richField" value="#{bean.value1}" />
<a4j:commandButton value="displayRichField" action="doSomething()"
onclick="alert('v:'+ #{rich:component('richField')}.getValue()); return true;" />
</h:form>
どちらもrich:dataTableでも機能し、datatableなどのIDを追加する必要はありません。Richfacesは非常に賢く、「現在の行」の例のIDを見つけます。
<h:form>
<rich:dataTable id="mydatatable" value="bean.findValues()" var="myvar">
<rich:column>
<h:inputText id="textField" value="#{myvar.text1}" />
<a4j:commandButton value="displayTextField" action="doSomething()"
onclick="alert('v:'+ #{rich:element('textField')}.value); return true;" />
</rich:column>
<rich:column>
<rich:inplaceInput id="richField" value="#{myvar.text2}" />
<a4j:commandButton value="displayRichField" action="doSomething()"
onclick="alert('v:'+ #{rich:component('richField')}.getValue()); return true;" />
</rich:column>
</rich:dataTable>
</h:form>