Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 使用条件呈现时,未在请求作用域bean中处理输入值_Jsf_Jsf 1.2_Conditional Rendering - Fatal编程技术网

Jsf 使用条件呈现时,未在请求作用域bean中处理输入值

Jsf 使用条件呈现时,未在请求作用域bean中处理输入值,jsf,jsf-1.2,conditional-rendering,Jsf,Jsf 1.2,Conditional Rendering,我知道这类问题在这里已经被问过无数次了,但我在相关的帖子中找不到解决问题的方法 JSF1.2 我有一个请求范围的bean,其方法用作valueChangeListener: class DoStuff{ ... public void step1ChkStuffIncluded_CheckedChanged(ValueChangeEvent event){ StuffDocument cd = (StuffDocument)getInfo("StuffDocume

我知道这类问题在这里已经被问过无数次了,但我在相关的帖子中找不到解决问题的方法

JSF1.2

我有一个请求范围的bean,其方法用作valueChangeListener:

class DoStuff{
    ...
    public void step1ChkStuffIncluded_CheckedChanged(ValueChangeEvent event){
        StuffDocument cd = (StuffDocument)getInfo("StuffDocument");
        if(cd == null){
            Logger.Error("DoStuff", "step1ChkStuffIncluded_CheckedChanged", "No stuff document (null)");
            return;
        }

        if (step1ChkStuffIncludedChecked){
            cd.handleChecked();
        }
        else{
            cd.handleUnchecked();
        }
    }
    ...
}
通过
选择BooleanCheckbox
组件,如下所示(.jspx):

每当bean的作用域是会话时,复选框的setter和侦听器都会执行,但不会在请求作用域中执行。不幸的是,除此之外,我找不到任何线索


任何建议都将不胜感激。欢迎要求进一步澄清。

您在父组件上有一个
呈现=“#{DoStuff.pnlStep1}”
。在表单提交的处理过程中,作为攻击保护的一部分,JSF将确定输入组件(及其所有父组件)是否根据服务器端条件呈现。如果未渲染,则在处理过程中将完全跳过它

它在会话范围的bean中工作,但在请求范围的bean中失败,这表明
rendered=“#{DoStuff.pnlStep1}”
后面的值是根据一些基于请求的变量/条件确定的,这些变量/条件在显示表单的请求期间存在,但在处理表单提交的请求期间不存在

要解决此问题,您需要确保在处理表单提交请求期间,为
rendered=“#{DoStuff.pnlStep1}”
后面的值保留完全相同的变量/条件。根据条件的性质和提交表单的方式,有几种方法可以实现这一点。其中一种方法是通过
将基于请求的变量/条件作为请求参数传回

典型的JSF2.0修复方法是将bean放在视图范围内,该范围在JSF1.2中不可用,但可以使用Tomahawk的
组件进行模拟

另见:
    ...
    </h:panelGroup> 
    <h:panelGroup rendered="#{DoStuff.pnlStep1}">
        <p>
        <label for="step1ChkStuffIncluded">#{DoStuff.step1ChkStuffIncludedText}</label>

        <h:selectBooleanCheckbox
            id="step1ChkStuffIncluded"
            onchange="submit();"
            value="#{DoStuff.step1ChkStuffIncludedChecked}"
            valueChangeListener="#{DoStuff.step1ChkStuffIncluded_CheckedChanged}">
        </h:selectBooleanCheckbox></p>
    </h:panelGroup>
    <div id="someDiv">
    ...
xmlns:h="http://java.sun.com/jsf/html"