如何将多个复选框传递给动作
Posted
技术标签:
【中文标题】如何将多个复选框传递给动作【英文标题】:How to pass multiple checkboxes to the Action 【发布时间】:2013-01-02 16:21:13 【问题描述】:我正在使用 Struts 2 和 Freemarker。这是我的动作课:
package test;
import java.util.ArrayList;
import java.util.List;
public class WelcomeAction
private String userName;
private String gender;
private List<String> fruits;
private String fruit;
public String execute()
// if(!userName.equals("a"))
//
// return "fail";
//
// else
// return "SUCCESS";
//
return "SUCCESS";
public String getUserName()
return userName;
public void setUserName(String userName)
this.userName = userName;
public String getGender()
return gender;
public void setGender(String gender)
this.gender = gender;
public String getFruitsPicked()
return fruit;
public void setFruitsPicked(String fruitsPicked)
this.fruit = fruitsPicked;
public List<String> getFruits()
return fruits;
public void setFruits(List<String> fruits)
this.fruits = fruits;
public WelcomeAction()
fruits = new ArrayList<String>();
fruits.add("apples");
fruits.add("oranges");
fruits.add("pears");
fruits.add("peaches");
这就是我的.ftl
:
<input type="checkbox" list="fruits" name="friut[]" value="apples" /> Apples<br />
<input type="checkbox" list="fruits" name="friut[]" value="oranges" /> Oranges<br />
<input type="checkbox" list="fruits" name="friut[]" value="pears" /> Pears<br />
<input type="checkbox" list="fruits" name="friut[]" value="peaches" /> Peaches<br />
这是我尝试打印的方式:
<#list fruits as item>$item</#list>
但上面的命令会打印我在构造函数中添加的列表中的所有项目。当然,我只想要提交表单时检查的项目。
【问题讨论】:
【参考方案1】:name="friut[]"
应该是 name="fruits"
。 JavaBean 属性名称是fruits
,而不是fruit
(也不是friut
...注意错字)。我不知道[]
对Struts 有意义,更好的说法是,对于ParametersIntercaptor
使用的OGNL/ValueStack.setValue
。 (尽管它理解fruits[0]
,这对于在现有列表中设置元素很有用。)。所以最后 Struts 忽略了参数,所以你最终得到了原始列表。 list="fruits"
来自哪里?
【讨论】:
【参考方案2】:你可以使用
<s:checkboxlist name="fruit" list="fruits"/>
您不需要在多个<input>
字段中保留多个复选框的值,因此不需要很多<input>
字段。 Struts2 应该适当地渲染它。 逗号分隔的值将出现多个值。
在您的代码中,您必须为 list
添加 getter 和 setter,方法与为包含选定值的 fruit
相同。 params
interceptor 将完成它的工作,在提交表单时填充您使用 setter 调用的操作。
【讨论】:
以上是关于如何将多个复选框传递给动作的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中使用api将多个选中的复选框值传递给服务器?
如何将多个选定的(通过复选框)行 ID 传递给 jQuery 中的 php 脚本?
在 MVC/Razor 中,如何获取多个复选框的值并将它们全部传递给控制器?