有没有办法在<a4j:jsFunction>
的{{1}}属性中访问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的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="table@body, scroller" execute="@form" />
如果删除@body
属性中的render=""
,jsFunction可以正常工作,但是在渲染后表格中没有显示任何内容(如果我按F5,表格中会显示正确的数据)
答案 0 :(得分:2)
根据剪切的代码,您尝试在过滤器更改时重新呈现表,然后将焦点设置回过滤器输入。我猜过滤器输入放在表头中(重新渲染表后它们会失去焦点)。
使其工作的一种方法(更有效)是不重新渲染输入,您可以使用元组件仅渲染表的标题/正文/页脚:
<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>