AJAX操作后,METADATA参数消失

时间:2014-05-05 10:08:05

标签: ajax jsf jsf-2 metadata

在模板中定义参数

<f:metadata >
    <f:viewParam name="pageKey" value="#{parameterProvider.pageKey}" />
</f:metadata>

所有工作正常,除了AJAX请求,这个param消失了吗? xhtml页面中的示例ajax按钮:

Message value from server= [#{lockerBean.msg}]<br/>
<h:form>
       <h:commandButton value="Ajax Action" styleClass="systemButton" >
           <f:ajax  execute="@all" render="@all" listener="#{lockerBean.ajaxButton(event)}"/>
       </h:commandButton><br/>

</h:form>

ajax动作就是

public void ajaxButton(ActionEvent event){
        msg="Ajax reload";
    }

ajax请求pageKey消失后。如果我设置required="true"我会得到valudation错误 j_idt3: Validation Error: Value is required.明确指出,该参数已被删除。我怎么能保留它?

我知道includeViewParams,但我不太了解这种机制,并且不容易添加到各种按钮和链接......我可以以某种方式强制它被传递或我能将它们注入某个环境吗?

编辑: 此日志可能有助于了解发生的情况: ParameterProvider是包含pageKey的sessionscoped CGI。我修改了getter&amp; setter,所以他们记录被叫的信息。在整个应用程序中,只有在jsf生命周期中应用请求值时才使用此值的getter和setter(我自己的代码使用不同的方法)

14:04:06,400 OFF   [ParameterProvider] (default task-12) Getting pageKey[-1] into viewParams.
14:04:06,401 OFF   [ParameterProvider] (default task-12) Setting pageKey[2] from viewParams.
14:04:06,401 OFF   [MultiActionLockListener] (default task-12) AJAX ACTION
14:04:06,414 OFF   [ParameterProvider] (default task-12) Getting pageKey[3] into viewParams.

正如你所看到的,在我们调用getter和setter for key之前(2已经从客户端3发送,假设要发送给客户端作为响应) 调用另一个动作将导致记录:

14:08:54,281 OFF   [MultiActionLockListener] (default task-14) AJAX ACTION
14:08:54,294 OFF   [ParameterProvider] (default task-14) Getting pageKey[7] into viewParams.

如你所见,没有getter和setter,这意味着pageKey消失了?

0 个答案:

没有答案