JSF2.0とprimefaces3.0を使用しています。私はrowtogglerとrowexpansionを持っています。私はprimefacesの古いバージョンを使用しているので、rowToggleイベントはありません。また、行拡張時にajaxを介してサーバー側のメソッドを呼び出す必要があります。そこで、rowtogglerの周りにdivタグを配置し、javascript関数を呼び出しました。ここで、rowexpansion内にあるpanelgridのクリックイベントを介してajax呼び出しを開始したいと思います。これが発生した場合、3.4rowToggleイベントのようになります。
4 に答える
行トグルをクリックすると、jQuery のイベント バインディングを使用して Javascript を実行できます。
<h:form id="form">
<p:dataTable id="dt" value="[1,2]">
<p:column>
<p:rowToggler />
</p:column>
</p:dataTable>
<p:remoteCommand name="remotecommand"
oncomplete="alert('remote command fired')" />
</h:form>
<script type="text/javascript">
$("[id='form:dt'] .ui-row-toggler").on("click", function() { remotecommand(); });
</script>
Javascriptの説明:
は$("[id='form:dt'] .ui-row-toggler")
、id( form:dt
) によってデータテーブルを選択し、スタイル クラスを持つすべての子孫を選択しますui-row-toggler
。
は.on("click", function() { remotecommand(); })
、によって宣言された Javascript 関数を起動するクリック イベントに無名関数をバインドしますp:remoteCommand
。
を使用して、またはp:remoteCommand
で Bean メソッドを実行できます。;-)action
actionListener
これが長期的な解決策であるとは思わないことに注意してください。PrimeFaces 3.4 にアップグレードすることは、より良い解決策です。
私はrowtogglerの周りにcommandLinkを配置し、commandlinkを介してajax呼び出しを行い、EL2.2を使用して値を渡すこともできます
<p:commandLink action="#{myBean.doSomething(foo)}" >
<p:rowToggler/>
</p:commandLink>
siebz0r の解決策を除いて、もう 1 つの解決策を見つけました。
<p:commandLink action="#{bean.abcFunction}"> <p:rowToggler/> </p:commandLink>
それも機能し、シンプルすぎます:-)
私はあなたが好きだと思います
<p:panelGrid>
<p:ajax event="click" listener="#{bean.onclick}" />
...
the rest of the grid here
...
<p:panelGrid>
私はそれをテストしていませんが、他のコンポーネントでは機能します