有什么方法可以在不使用<a4j:jsFunction>属性和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>的方法。我不需要BackingBean中的参数,也不需要action=""属性。

更新

我当前的代码是:

    <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属性中的render="",则jsFunction可以正常工作,但是渲染后,该表未显示任何内容(如果按F5键,则将在表中显示正确的数据)。

最佳答案

根据所截取的代码,您尝试重新呈现有关过滤器更改的表,然后将焦点重新设置为过滤器输入。我猜过滤器输入放在表头中(一旦重新渲染表,它们就会失去焦点)。

一种使其更有效的方法是不重新渲染输入,可以使用元组件仅渲染表的页眉/正文/页脚:

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

关于javascript - 如何访问a4j:jsFunction的oncomplete属性中的参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15359815/

10-11 12:41