任何人都可以解释如何使用复选框拦截器。在这里,我的问题是我必须将复选框值保存为'Y',如果在我正在查看来自数据库的详细信息的同时检查其他明智的'N',如果复选框的值是'Y'它有要检查否则不应该检查。
答案 0 :(得分:3)
在你的getter setter中添加转换代码
private String mycheckbox;
public String execute(){
//In action you will always get 'Y' or 'N'
System.out.println("In action mycheckbox :"+mycheckbox);
return SUCCESS;
}
public void setMycheckbox(String mycheckbox) {
if(mycheckbox.equalsIgnoreCase("false"))
{
this.mycheckbox="N";
}
else
{
this.mycheckbox = "Y";
}
}
public String getMycheckbox() {
if(mycheckbox.equalsIgnoreCase("N"))
{
//In JSPs you will always get true or false
this.mycheckbox="false";
}
else
{
this.mycheckbox = "true";
}
return mycheckbox;
}
在JSP中
<s:checkbox name="mycheckbox" id="mycheckbox" />
因此,您将获得'Y'
和'N'
但是对于struts标记,它将使用true
或false
。如果'Y'
存在,则会选中复选框。
因此上述解决方案可以解决您的问题。
你也可以使用与拦截器相同的逻辑,但我认为getter setter是最简单的方法,因为你会强制使用getter setter。
写作时
<s:checkbox name="mycheckbox" id="mycheckbox" fieldValue="Y" />
生成的Html是
<input id="mycheckbox" type="checkbox" value="Y" name="mycheckbox"></input>
<input id="__checkbox_mycheckbox" type="hidden" value="Y" name="__checkbox_mycheckbox"></input>
现在你可以看到它生成了隐藏字段。所以fieldvalue Y你将获得复选框的值=“Y”。
案例1:如果在mycheckbox变量中选中了复选框。
在操作中mycheckbox:Y(因为
<input id="mycheckbox"..>
中的值=“Y”)
如果未选中复选框
在操作中mycheckbox:false
案例2:但是如果未提交此复选框
CheckBoxInterceptor
将会显示它将使用_checkbox
前缀扫描参数并执行 - &gt;它将值设置为false所以尽管隐藏字段操作中没有值,但会得到一些值,即false
因此,如果选定的fieldValue
将返回到操作变量,如果未选中,则会将其设置为false。
您可以在此处指定setUncheckedValue("N");
这样您就可以N
中的__checkbox_mycheckbox
而不是mycheckbox
变量中的mycheckbox
。 __checkbox_mycheckbox
只会返回false。
但有一件事你需要记住,复选框值只转换为布尔值所以即使你设置了这个,你也会在mycheckbox
中得到“N”而不是{{1}}。 / p>