Jsf 2 选择BooleanCheckbox不';无法启动视图状态id
我有一个支持bean,它是Jsf 2 选择BooleanCheckbox不';无法启动视图状态id,jsf-2,primefaces,Jsf 2,Primefaces,我有一个支持bean,它是ViewScoped。我在表单中启用了一些ajaxSelectBooleanCheckboxes。 例如: 通常,html中应该有一些隐藏的输入字段以通过viewstate id。问题是这些字段不会在第一个页面请求时启动。当我单击其中一个复选框时,表单(以及相应的复选框)将被刷新。从这一刻起,视图状态id将与这些复选框一起发送,以便可以保留视图状态 其中最大的问题是,在第一次ajax调用时,启动了一组新的ViewScope bean,因此我丢失了关于第一个操作的数据
ViewScoped
。我在表单中启用了一些ajaxSelectBooleanCheckbox
es。
例如:
通常,html中应该有一些隐藏的输入字段以通过viewstate id。问题是这些字段不会在第一个页面请求时启动。当我单击其中一个复选框时,表单(以及相应的复选框)将被刷新。从这一刻起,视图状态id将与这些复选框一起发送,以便可以保留视图状态
其中最大的问题是,在第一次ajax调用时,启动了一组新的ViewScope bean,因此我丢失了关于第一个操作的数据。从那时起,一切似乎都正常工作
有人能告诉我可能有什么问题吗
确切代码:
<p:panel header="Schedule" toggleable="true">
<form>
<p:outputPanel id="schedule">
<ui:repeat var="scheduleDay" value="#{jobBean.jobScheduleDays}">
<div>
<p:selectBooleanCheckbox value="#{scheduleDay.selected}" style="margin:4px">
<p:ajax update=":schedule" />
</p:selectBooleanCheckbox>
<h:outputText value="#{scheduleDay.readableDay}" style="text-transform:capitalize"/>
</div>
</ui:repeat>
</p:outputPanel>
</form>
</p:panel>
您的问题是由于使用纯HTML
而不是JSF
造成的。
不仅使用正确的方法和操作URL集生成正确的HTML
元素,而且还负责生成两个额外的隐藏字段,标识提交的表单和JSF视图状态标识符
例如
产生
<form id="foo" name="foo" action="ViewHandler#getActionURL()" method="post">
<input type="hidden" name="foo" value="foo" />
<input type="hidden" name="javax.faces.ViewState" value="..." />
(表单操作URL由的结果填充)
普通HTML
与JSF ajax请求一起工作是因为它们不完全使用表单元素来发送HTTP POST请求,而是使用JavaScript的XMLHttpRequest
对象发送HTTP POST请求,其参数是通过使用JavaScript的form.elements遍历父表单中的输入元素填充的。JSF ajax响应将自动更新JSF视图状态隐藏字段,这就是为什么JSF能够处理第二次请求提交的表单
但是,当使用非ajax请求时,使用普通HTML
会很难成功。您的问题是由于使用普通HTML
而不是JSF
造成的。
不仅使用正确的方法和操作URL集生成正确的HTML
元素,而且还负责生成两个额外的隐藏字段,标识提交的表单和JSF视图状态标识符
例如
产生
<form id="foo" name="foo" action="ViewHandler#getActionURL()" method="post">
<input type="hidden" name="foo" value="foo" />
<input type="hidden" name="javax.faces.ViewState" value="..." />
(表单操作URL由的结果填充)
普通HTML
与JSF ajax请求一起工作是因为它们不完全使用表单元素来发送HTTP POST请求,而是使用JavaScript的XMLHttpRequest
对象发送HTTP POST请求,其参数是通过使用JavaScript的form.elements遍历父表单中的输入元素填充的。JSF ajax响应将自动更新JSF视图状态隐藏字段,这就是为什么JSF能够处理第二次请求提交的表单
但是,当使用非ajax请求时,使用普通HTML
会很难成功。所讨论表单的父组件是否事先由另一个ajax请求呈现?如果是这样,那么您的问题符合的第7点请注意,这个具体问题与复选框完全无关,您在使用例如
时会遇到完全相同的问题。不,情况并非如此。我已将代码添加到最初的帖子中。你所指的修复方法现在对我没有帮助。我找不到如何设置render属性(我认为它不可用?),因此,您使用的是普通HTML
而不是JSF
,这与列表中的第1点相矛盾?哦,是的,这导致了问题。页面的其他部分工作得很好,所以我浏览了所有可能导致它的原因。我只是一直忽略了这一点。非常感谢!该表单的父组件是否事先由另一个ajax请求呈现?如果是这样,那么您的问题符合的第7点请注意,这个具体问题与复选框完全无关,您在使用例如
时会遇到完全相同的问题。不,情况并非如此。我已将代码添加到最初的帖子中。你所指的修复方法现在对我没有帮助。我找不到如何设置render属性(我认为它不可用?),因此,您使用的是普通HTML
而不是JSF
,这与列表中的第1点相矛盾?哦,是的,这导致了问题。页面的其他部分工作得很好,所以我浏览了所有可能导致它的原因。我只是一直忽略了这一点。非常感谢!
<form id="foo" name="foo" action="ViewHandler#getActionURL()" method="post">
<input type="hidden" name="foo" value="foo" />
<input type="hidden" name="javax.faces.ViewState" value="..." />