2013-03-12 25 views
1

有什麼辦法來訪問一個<a4j:jsFunction>參數在它的oncomplete=""屬性,而不使用action=""屬性和<a4j:param>assingTo=""如何訪問一個參數A4J:jsFunction的屬性的onComplete

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

我正在尋找一種方法直接訪問<a4j:param>。我不需要BackingBean中的參數,我不需要action=""屬性。

UPDATE

我當前的代碼是:

<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的JavaScript:jsFunction:

 $(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="[email protected], scroller" execute="@form" /> 

如果我刪除render=""屬性中的@body,但在渲染後沒有顯示任何內容(如果按F5,表中將顯示正確的數據),則jsFunction正常工作。

回答

2

基於剪切的代碼,您試圖在濾鏡更改上重新渲染表格,然後將焦點設置回濾鏡輸入。我猜過濾器輸入被放置在表頭(並且一旦表格被重新渲染,它們就失去焦點)。

的一種方式(更有效),使其工作就是不要再渲染輸入,您可以使用元組件來呈現只表的頁眉/體/頁腳:

<a4j:jsFunction name="refreshTableFilter" render="[email protected] [email protected] 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> 
+0

您對meta組件的回答聽起來很不錯,但不幸的是它無法正常工作。我將'render =「table,scroller」'改成了'render =「table @ body,scroller」'並且輸入字段仍然是焦點的(渲染後),但是表格體在渲染後總是空的。例如桌子有兩排。當我在過濾器字段中輸入內容並在渲染後顯示一行時,將不會顯示任何行。如果我清除過濾器值,則渲染後不會顯示任何行。有什麼我必須做的使用元組件? – marco235 2013-03-13 08:44:34

+0

@ marco235元數據由rich:extendedDataTable支持,你使用這個組件嗎?你能提供更多的代碼(包括表格)嗎? – Andrey 2013-03-14 00:06:53

+0

我使用extendedDataTable。我用當前的代碼更新了這個問題。 – marco235 2013-03-14 14:15:35