1

当我尝试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>

当然,我已经像这样向我的复合组件添加了客户端行为

在模糊事件上调用侦听器方法,但我的参数“字段”和“段落”始终具有空值。

我认为这些变量不能从复合组件中访问。

我试图通过复合属性将这两个变量传递给复合组件,但我不认为这是一个干净的解决方案。

有正确的方法吗?

感谢您的关注。

4

2 回答 2

0

如果要将参数作为字符串传递,则需要这样编写:

<f:ajax listener="#{myean.doSomething('arg1', 'arg2')}">

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

另外-您确定您的听众执行了吗?您如何尝试获得这些值。请分享代码。

于 2013-03-08T16:08:26.010 回答
0

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

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

也可以看看:

于 2013-03-13T14:14:12.013 回答