如何将多个复选框传递给 Struts 2 中的操作?

问题描述 投票:0回答:2

我正在使用 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>

但是上面的命令打印了我在构造函数中添加的列表中的所有项目。当然,我只想要提交表单时检查过的项目。

java jsp checkbox struts2 freemarker
2个回答
3
投票

name="friut[]"
应该是
name="fruits"
。 JavaBean 属性名称是
fruits
,而不是
fruit
(也不是
friut
...注意拼写错误)。我不知道
[]
对于 Struts 是否有意义,更好的说法是对于
ValueStack.setValue
使用的 OGNL/
ParametersIntercaptor
有意义。 (它理解
fruits[0]
,这对于在现有列表中设置元素很有用。)。所以最后 Struts 忽略了这些参数,所以你最终得到的是原始列表。
list="fruits"
从哪里来?


1
投票

你可以使用

<s:checkboxlist name="fruit" list="fruits"/>

您不需要在多个

<input>
字段中保留多个复选框的值,因此不需要很多
<input>
字段。 Struts2 应该适当地呈现它。多个值将出现在操作中,并使用 逗号分隔值

在代码中,您必须为

list
添加 getter 和 setter,其方式与包含所选值的
fruit
相同。提交表单时,
params
拦截器
将完成填充您使用设置器调用的操作的工作。

© www.soinside.com 2019 - 2024. All rights reserved.