我需要将<a4j:jsFunction>
的调用html元素传递给它的oncomplete
函数。我看到了this回答,但是我不认为将html元素(作为一个字符串,我想?)传递给bean并且背面非常优雅,我觉得它有点乱。
这是我的代码
<td class="col-md-2 clickable text-right"
onclick="orderBy('getAmount','DESC')">
#{msg.label_amount}
</td>
<a4j:jsFunction name="orderBy" action="#{backingBeanRef['orderBy']}"
oncomplete="afterOrderBy()"
render="list_form" >
<a4j:param name="ref" assignTo="#{backingBeanRef['orderByMethodName']}"/>
<a4j:param name="ref2" assignTo="#{backingBeanRef['orderBySortOrder']}"/>
</a4j:jsFunction>
问题
有没有办法将html元素传递给a4j:jsFunction
,并将其传递给它的oncomplete
回调函数,而不将html元素发送到bean并返回?
理想的解决方案是为调用方添加一个参数,如orderBy(... , this)
和jsFunction的相应参数,如<a4j:param name="element"/>
:
<td class="col-md-2 clickable text-right"
onclick="orderBy('getAmount','DESC',this)">
#{msg.label_amount}
</td>
<a4j:jsFunction name="orderBy" action="#{backingBeanRef['orderBy']}"
oncomplete="afterOrderBy(element)"
render="list_form" >
<a4j:param name="ref" assignTo="#{backingBeanRef['orderByMethodName']}"/>
<a4j:param name="ref2" assignTo="#{backingBeanRef['orderBySortOrder']}"/>
<a4j:param name="element"/>
</a4j:jsFunction>
但它不起作用。我在js函数的第一行有一个断点,它没有被调用。
我刚刚将..,this)
添加到了金额列(我显示的唯一一个),所以如果我点击其他列(没有{{1>} 1}})我的js函数被调用,只有参数未定义。
那么,有可能这样做吗?
修改
如果我尝试不添加任何..,this)
,并按this answer指示执行<a4j:param>
,则发送到js函数的元素是一个范围(当我调试/将其记录到控制台时,它没有oncomplete="afterOrderBy(this)"
个孩子,而且是
.source
This answer也指出了一些方法来做类似的事情但不是这样。
EDIT2
请阅读
中的文档[...]不建议在里面使用use关键字 EL表达式,因为它不会总是指向组件所在的位置 Ajax请求已启动。[...]
所以...
outerHTML: "<span id=\"sgfrmId:j_idt601\" style=\"display: none;\"></span>"
...
做错了。
提前致谢。
答案 0 :(得分:1)
a4j:jsFunction仅用于触发ajax请求,oncomplete作为服务器响应的一部分执行(即不在函数的上下文中),只需将元素引用保存到全局变量并使用不完整的代码那个变量。
E.g。
<td onclick="sourceElement=this; orderBy();">…</td>
afterOrderBy = function() {
// do something with sourceElement …
}