如何将多个复选框传递给动作

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

您不需要在多个&lt;input&gt; 字段中保留多个复选框的值,因此不需要很多&lt;input&gt; 字段。 Struts2 应该适当地渲染它。 逗号分隔的值将出现多个值。

在您的代码中,您必须为 list 添加 getter 和 setter,方法与为包含选定值的 fruit 相同。 params interceptor 将完成它的工作,在提交表单时填充您使用 setter 调用的操作。

【讨论】:

以上是关于如何将多个复选框传递给动作的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中使用api将多个选中的复选框值传递给服务器?

如何将多个选定的(通过复选框)行 ID 传递给 jQuery 中的 php 脚本?

通过 Ajax 将多个复选框传递给 PHP

在 MVC/Razor 中,如何获取多个复选框的值并将它们全部传递给控制器​​?

如何将一组选中/未选中的复选框值传递给 PHP 电子邮件生成器?

如何使用 PHP 将复选框的值传递给 mySQL 数据库?