Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 选择BooleanCheckbox不';无法启动视图状态id_Jsf 2_Primefaces - Fatal编程技术网

Jsf 2 选择BooleanCheckbox不';无法启动视图状态id

Jsf 2 选择BooleanCheckbox不';无法启动视图状态id,jsf-2,primefaces,Jsf 2,Primefaces,我有一个支持bean,它是ViewScoped。我在表单中启用了一些ajaxSelectBooleanCheckboxes。 例如: 通常,html中应该有一些隐藏的输入字段以通过viewstate id。问题是这些字段不会在第一个页面请求时启动。当我单击其中一个复选框时,表单(以及相应的复选框)将被刷新。从这一刻起,视图状态id将与这些复选框一起发送,以便可以保留视图状态 其中最大的问题是,在第一次ajax调用时,启动了一组新的ViewScope bean,因此我丢失了关于第一个操作的数据

我有一个支持bean,它是
ViewScoped
。我在表单中启用了一些ajax
SelectBooleanCheckbox
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="..." />