javascript var未正确传递给辅助bean

时间:2012-07-04 17:46:28

标签: javascript ajax jsf ajax4jsf

我有这段代码无法正常工作。我已定义fieldToStore。我可以提醒它,我可以在firebug控制台中看到它的值,但是当它被传递给myBean时,它总是在String值的情况下是未定义的,如果它是布尔值则是false。 有什么想法吗?

<a4j:commandButton id="bt1" action="#{myBean.doSomething}" onclick="fieldToStore=false;saveFieldState();">
</a4j:commandButton>        
<a4j:jsFunction name="saveFieldState" action="#{myBean.dummyAction}" />
   <a4j:actionparam name="fieldToStore" assignTo="#{myBean.fieldToStore}" />
</a4j:jsFunction>

我的期望是,在点击bt1之后,myBean.fieldToStore的值为false,根据javascript var fieldToStore。

2 个答案:

答案 0 :(得分:2)

您正在使用<a4j:actionParam>a combination of f:param and f:actionListenervalue属性分配给assignTo中的媒体资源。

您想要使用<a4j:param>。见example in the official docs

答案 1 :(得分:1)

我想通了......问题就在于我在事件onclick上调用jsFunction的方式:

onclick="fieldToStore=false;saveFieldState();

它应该是:

onclick="fieldToStore=false;saveFieldState(fieldToStore);

有关richfaces文档的示例具有误导性:

<body onload="callScript()">
  <h:form>
         ...
        <a4j:jsFunction name="callScript" data="#{bean.someProperty1}" reRender="someComponent" oncomplete="myScript(data.subProperty1, data.subProperty2)">
              <a4j:actionparam name="param_name" assignTo="#{bean.someProperty2}"/>
        </a4j:jsFunction>
        ...
  </h:form>
  ...
</body>

Imo应该是onload =“callScript(param_name)”。