【问题标题】:How to access a parameter in a4j:jsFunction's oncomplete attribute如何访问 a4j:jsFunction 的 oncomplete 属性中的参数
【发布时间】:2013-02-27 21:11:04
【问题描述】:

有什么方法可以访问<a4j:jsFunction>oncomplete="" 属性中的参数,而不使用action="" 属性和<a4j:param>assingTo=""

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

我正在寻找一种直接访问&lt;a4j:param&gt;的方法。我不需要 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:jsFunction:

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

如果我删除render=""attribute 中的@body,jsFunction 可以正常工作,但是表格在渲染后不显示任何内容(如果我按 F5,表格中将显示正确的数据)。

【问题讨论】:

    标签: javascript jsf-2 richfaces


    【解决方案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>
    

    【讨论】:

    • 您对元组件的回答对我来说听起来非常好,但不幸的是它不能正常工作。我将render="table,scroller" 更改为render="table@body,scroller" 并且输入字段仍然集中(渲染后),但渲染后表格主体始终为空。例如该表有两行。当我在过滤器字段中输入内容时,渲染后应该显示一行,但不会显示任何行。如果我清除过滤器值,渲染后不会显示任何行。使用元组件有什么需要我做的吗?
    • @marco235 元数据由rich:extendedDataTable 支持,你在用这个组件吗?能否提供更多代码(包括表格)。
    • 我使用extendedDataTable。我用我当前的代码更新了这个问题。
    • @marco235 我尝试了您示例中的代码,它对我来说工作正常。我在 RichFaces 4.2.0.Final 上进行了尝试(在最新版本 4.3.0.Final 上,您需要指定 filterType="custom")。 jsFunction 和表格的形式一样吗?您可能想问一个关于为什么 render="table@body" 不能按预期为您工作的新问题。
    • 感谢您的帮助。我目前使用 RichFaces 4.2.2.Final 并将其更改为 4.3.0.Final 但没有成功。我会寻找为什么@body 不起作用的答案。如果我找到了,我会在这里发布解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 2011-09-29
    • 2011-09-11
    • 1970-01-01
    • 2023-03-17
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多