在模板中定义参数
<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消失了?