当我尝试在复合组件中传递f:ajax
时,我的所有侦听器参数都被解析为null。
<c:forEach var="paragraph" items="#{Chapiter.paragraphList}">
<c:forEach var="field" items="#{paragraph.fieldList}">
<util:inputNumber type="double" value="#{field.value}" decimal="2">
<f:ajax listener="#{myean.doSomething(field, paragraph)}">
</f:ajax>
</util:inputNumber>
</c:forEach>
</c:forEach>
当然我已经在我的复合组件中添加了一个客户端行为,就像这样
在blur事件上调用listener方法,但我的参数“field”和“paragraph”始终为null值。
我认为无法从复合组件中访问变量。
我试图通过复合属性将这两个变量传递给复合组件,但我不认为它是一个干净的解决方案。
有没有正确的方法呢?
感谢您的关注。
答案 0 :(得分:0)
如果你想将参数作为字符串传递,你需要像这样写:
<f:ajax listener="#{myean.doSomething('arg1', 'arg2')}">
否则,期望arg1
和arg2
被定义为变量。我假设您将函数定义为接受2个字符串作为参数。
另外 - 你确定你的听众执行了吗?你是如何尝试获得这些价值的?请分享代码。
答案 1 :(得分:0)
<c:forEach>
在视图构建时运行,因此paragraph
和field
变量仅在视图构建期间可用。它们在组件树访问期间或视图渲染时间期间不可用。 ajax动作侦听器方法是在JSF组件树访问期间确定的,而不是在视图构建时期间确定的,因此参数将始终解析null
。
如果您将<c:forEach>
替换为<ui:repeat>
(并确保您使用的是最新的Mojarra版本,其中所有特殊的<ui:repeat>
问题都已解决),并将bean放入视图中范围,同时保持吸气剂没有业务逻辑,那么它应该工作正常。