1

属性 and ofを使用せずに<a4j:jsFunction>、属性のa のパラメーターにアクセスする方法はありますか?oncomplete=""action=""assingTo=""<a4j:param>

<a4j:jsFunction name="refreshTableFilter" render="table,scroller" execute="@form" oncomplete="setCursor(componentId);">
    <a4j:param name="componentId" />
</a4j:jsFunction>

に直接アクセスする方法を探しています<a4j:param>action=""BackingBean にパラメーターは必要なく、属性も必要ありません。

アップデート

私の現在のコードは次のとおりです。

    <rich:extendedDataTable id="table"
        rowKeyVar="index" selectionMode="single"
        selection="#{cc.attrs.controller.selection}"
        displayColumnsOrder="#{cc.attrs.configController.currentColumnConfig}"
        rowClasses="light-table-row,dark-table-row"
        value="#{cc.attrs.controller.entities}" var="entity"
        rows="#{cc.attrs.rows}">

        <a4j:ajax event="rowclick" onbegin="tableRowClick(#{index})"/> 

        <rich:column id="cShipName" styleClass="segment"
            filterValue="#{cc.attrs.controller.vesselNameFilter}"
            filterExpression="#{fn:containsIgnoreCase(entity.vesselName, fn:trim(cc.attrs.controller.vesselNameFilter))}"
            width="140px">
            <f:facet name="header" id="headerShipName">
                <div style="margin-top: 5px;">
                    <h:inputText id="shipnameFilter" style="width:99.9%" value="#{cc.attrs.controller.vesselNameFilter}" />
                </div>
            </f:facet>
            <h:outputText value="#{entity.vesselName}" />               
        </rich:column>

  ...

    </rich:extendedDataTable>

a4j:jsFunction を呼び出す JavaScript:

      $(document).bind('keypress', function(e) {
         if(e.keyCode==13){
            var elementId = document.activeElement.id;
            if (elementId.indexOf('shipnameFilter') != -1) {
                refreshTableFilter();
                return false;
            }                
            return true;
         }
      });

a4j:js機能:

<a4j:jsFunction name="refreshTableFilter" render="table@body, scroller" execute="@form" />

@body属性内のを削除すると、jsFunction は正しく機能しrender=""ますが、レンダリング後にテーブルに何も表示されません (F5 を押すと、正しいデータがテーブルに表示されます)。

4

1 に答える 1

2

切り取ったコードに基づいて、フィルターの変更時にテーブルを再レンダリングし、フォーカスをフィルター入力に戻そうとしています。フィルター入力はテーブル ヘッダーに配置されていると思います (テーブルが再レンダリングされると、それらはフォーカスを失います)。

それを機能させる 1 つの (より効率的な) 方法は、入力を再レンダリングしないことです。メタ コンポーネントを使用して、テーブルのヘッダー/ボディ/フッターのみをレンダリングできます。

<a4j:jsFunction name="refreshTableFilter" render="table@body table@footer scroller" execute="@form"/>

最初の質問について。サーバー側で何かに割り当てずに oncomplete ハンドラでパラメータを取得することはできないようです。例えば:

   <a:jsFunction name="refreshTableFilter" render="table,scroller" execute="@form"
                 oncomplete="setCursor(event.data);"
                 data="#{refreshTableFilterParam}">
      <a:param name="paramName" assignTo="#{refreshTableFilterParam}"/>
    </a:jsFunction>
于 2013-03-12T18:27:20.393 に答える