Jsf 使用条件呈现时,未在请求作用域bean中处理输入值
我知道这类问题在这里已经被问过无数次了,但我在相关的帖子中找不到解决问题的方法 JSF1.2 我有一个请求范围的bean,其方法用作valueChangeListener: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
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"