<s:checkbox>不以struts2形式自动填充</s:checkbox>

时间:2014-07-08 11:39:02

标签: struts2

任何人都可以解释如何使用复选框拦截器。在这里,我的问题是我必须将复选框值保存为'Y',如果在我正在查看来自数据库的详细信息的同时检查其他明智的'N',如果复选框的值是'Y'它有要检查否则不应该检查。

1 个答案:

答案 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标记,它将使用truefalse。如果'Y'存在,则会选中复选框。

因此上述解决方案可以解决您的问题。

你也可以使用与拦截器相同的逻辑,但我认为getter setter是最简单的方法,因为你会强制使用getter setter。

CheckboxInterceptor如何工作?

写作时

<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>