繁体   English   中英

f:ajax侦听器,其参数不适用于复合组件

[英]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')}">

否则,它将期望arg1arg2被定义为变量。 我假设您已将函数定义为接受2个字符串作为参数。

另外,您确定您的监听器会执行吗? 您如何尝试获得这些价值。 请分享代码。

<c:forEach>在视图构建期间运行,因此, paragraphfield变量仅在视图构建期间可用。 它们在组件树访问期间或视图渲染期间均不可用。 ajax动作侦听器方法是在JSF组件树访问期间确定的,而不是在视图构建期间确定的,因此,参数将始终解析为null

如果用<ui:repeat>替换<c:forEach> (并确保您使用的是最新的Mojarra版本,其中所有特殊的<ui:repeat>问题均已解决),然后将bean放置在视图范围内,同时保持那些没有业务逻辑的吸气剂,那么它应该可以正常工作。

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM