【发布时间】:2010-11-04 18:38:05
【问题描述】:
JSF查看代码:
<f:view>
<h:form>
<h:panelGrid>
<h:inputText id="key" value="#{myManagedBean.key}"/>
<h:selectBooleanCheckbox id="rerun" value="#{myManagedBean.rerun}" rendered="#{myManagedBean.displayRerun}"/>
<h:commandButton id="check" action="#{myManagedBean.check}"/>
</h:panelGrid>
</h:form>
<f:view>
JSF型号代码:
public class MyManagedBean {
private boolean displayRerun;
public void setDisplayRerun(boolean aDisplayRerun) {
this.displayRerun = aDisplayRerun }
public boolean getDisplayRerun() {
return this.displayRerun;
}
private String key;
public void setKey(String aKey) {
this.key = aKey
}
public String getKey() {
return this.key;
}
private boolean rerun;
public void setRerun(boolean arerun) {
this.rerun = arerun
}
public boolean getRerun() {
return this.rerun;
}
public String check() {
//do data validation
setDisplayRerun(true);
System.out.println(getRerun());
}
}
无论复选框是否被选中,这总是打印false。
关于我的要求的其他信息:
Nick/BalusC,我的托管 bean 属于请求范围。我提供的确实是简化的代码 sn-p。我的页面有几个用户输入控件以及一个命令按钮。在提交命令按钮时,我调用支持 bean 的操作方法,在其中我进行数据验证(在这种情况下,我查找数据库并查看输入是否已经注册。)如果已经注册,我回到同一页面,这个当我显示 singleBooleanCheckBox 供用户选择并再次点击命令按钮时。 我正在根据 managedbean 属性(在数据验证期间设置的布尔标志)切换复选框的显示。
当我重新提交选中复选框的页面时,我没有收到此数据。
为了进一步验证,我将 selectBooleanCheckbox 替换为具有类似行为的命令按钮(基本上最初不呈现它,而仅在数据验证时显示它)。我将它的@action 映射到我的 managedbean 的 action 方法。令我惊讶的是,当我点击按钮时,操作方法没有执行。相反,页面会像“立即”场景或重定向一样刷新。
我已经为此苦苦挣扎了将近 6 个小时。感谢您的经验丰富的见解。
谢谢。
【问题讨论】:
-
托管bean的范围是什么?
-
到目前为止您发布的代码非常好。问题出在其他地方。可能您将代码 sn-p 过分简化了。请发布一个完整的SSCCE。第一个猜测:您在数据表中使用它并且模型没有正确保存。 @Nick:你能举例说明范围在这个特定问题中的重要性吗?
-
Nick/BalusC,我的托管 bean 是请求范围。我尝试过的一些其他更新。
标签: jsf