1

我有这段代码无法正常工作。我已经fieldToStore定义了。我可以提醒它,我可以在 firebug 控制台中看到它的值,但是当它传递给 myBean 时,如果它是字符串值,它总是未定义的,如果它是布尔值,它总是未定义的。有任何想法吗?

<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。

4

2 回答 2

2

您正在使用<a4j:actionParam>,这是f:param 和 f:actionListener 的组合,它将其value属性分配给 中的属性assignTo

你想<a4j:param>改用。请参阅官方文档中的此示例

于 2012-07-04T18:10:08.810 回答
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)"。

于 2012-07-05T16:13:37.737 回答