
[英]JSF f:ajax listener not called when used with composite component and execute=“@this”
[英]f:ajax listener with arguments not working with composite component
当我尝试在复合组件内部传递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>
当然,我已经将客户端行为添加到了这样的复合组件中
在模糊事件上调用了listener方法,但是我的参数“ field”和“ paragraph”始终为空值。
我认为无法从复合组件访问变量。
我试图通过一个Composite属性将两个变量都传递给Composite组件,但是我不认为这是一个干净的解决方案。
有正确的方法吗?
感谢您的关注。
如果要将参数作为字符串传递,则需要这样编写:
<f:ajax listener="#{myean.doSomething('arg1', 'arg2')}">
否则,它将期望arg1
和arg2
被定义为变量。 我假设您已将函数定义为接受2个字符串作为参数。
另外,您确定您的监听器会执行吗? 您如何尝试获得这些价值。 请分享代码。
<c:forEach>
在视图构建期间运行,因此, paragraph
和field
变量仅在视图构建期间可用。 它们在组件树访问期间或视图渲染期间均不可用。 ajax动作侦听器方法是在JSF组件树访问期间确定的,而不是在视图构建期间确定的,因此,参数将始终解析为null
。
如果用<ui:repeat>
替换<c:forEach>
(并确保您使用的是最新的Mojarra版本,其中所有特殊的<ui:repeat>
问题均已解决),然后将bean放置在视图范围内,同时保持那些没有业务逻辑的吸气剂,那么它应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.