3

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>

しかし、上記のコマンドは、コンストラクターに追加したリスト内のすべての項目を出力します。もちろん、フォームが送信されたときにチェックされた項目のみが必要です。

4

2 に答える 2

3

name="friut[]"する必要がありますname="fruits"。JavaBean プロパティ名はfruitsではありませんfruit(friutタイプミスに注意してください)。[]それが Struts にとって意味があるValueStack.setValueかどうかはわかりませんParametersIntercaptor。(ただし、既存のリストに要素を設定するのに役立つことは理解しfruits[0]ています。)したがって、最後に Struts はパラメーターを無視したため、元のリストになります。どこlist="fruits"から来たの?

于 2013-01-18T22:43:05.853 に答える
1

使用できます

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

<input>複数のフィールドで複数のチェックボックスの値を保持する必要がないため、必要な数の<input>フィールドはありません。Struts2 はそれを適切にレンダリングする必要があります。複数の値は、カンマ区切りの値でアクションに渡されます。

listコードでは、選択した値を含むのと同じ方法でゲッターとセッターを追加する必要がありfruitます。paramsインターセプターは、フォームが送信されたときにセッターで呼び出されたアクションを設定する仕事をします。

于 2013-01-19T16:43:53.990 に答える