f:带有不使用复合组件的参数的ajax监听器

时间:2013-03-07 15:03:48

标签: ajax jsf jsf-2 listener

当我尝试在复合组件中传递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值。

我认为无法从复合组件中访问变量。

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

有没有正确的方法呢?

感谢您的关注。

2 个答案:

答案 0 :(得分:0)

如果你想将参数作为字符串传递,你需要像这样写:

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

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

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

答案 1 :(得分:0)

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

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

另见:

相关问题