4

UIフォーム要素で選択された値に基づいてデータを保存する必要があります

<s:select key="invoice.productSold" list="${productSold}" />

productSold 値のドロップダウン リスト ''(空白)、'はい'、'いいえ'。

私のブーリアンコンバーター

public class BooleanConverter extends StrutsTypeConverter {

@Override
/*From form*/
public Object convertFromString(Map context, String[] values, Class toClass) {
        String value = values[0];
        if (value == "") {
            System.out.println("null");
                return null;
        }
        if ("No".equalsIgnoreCase(value) || "0".equals(value)) {
                return "false";
        } else if ("Yes".equalsIgnoreCase(value) || "1".equals(value)) {
                return "true";
        } else {
            return null;
        }
}

@Override
public String convertToString(Map context, Object o) {
        Boolean value = (Boolean) o;
        return String.valueOf(value);
}

}

public class Invoice{

Boolean productSold;
<getter>
<setter>
}

問題

  1. 私のフォームのドロップダウンは「はい」を選択して更新しています。更新後、ドロップダウンに「はい」が表示されません。空白で表示されます。
  2. フォームで「はい」を選択すると「true」を返す ConvertFromString メソッドと、「false」を返す ConverToString メソッド。

アクションクラス


public UpdateAction extends ActionSupport{
protected List<String> productSold;
public List<String> getProductSold() {
    List<String> myOptions= new ArrayList<String>();
       myOptions.add("");
       myOptions.add("Yes");
       myOptions.add("No");

    return myOptions;
}

4

2 に答える 2

1

カスタムのブール値コンバーターは必要ありません。ブール値の「適切な」テキストを取得するには、Struts2 の国際化機能を使用してください。true = Yesfalse = Noをメッセージ プロパティに配置し、タグの属性を使用してメソッドを呼び出しlistValue、と のメッセージを取得します。<s:select>getTexttruefalse

<s:select key="invoice.productSold" list="productSold" listValue="%{getText(top)}"/>

listところで、値スタックから値を取得するために、属性内で「特別な」表記を使用する必要はありません。

BTW no.2: アクション内でこのメソッドは必要ありませんproductSold。代わりに、リストの OGNL 表記を使用して、JSP で yes/no リストを定義できます{...}

<s:select key="invoice.productSold" list='{"", true, false}' listValue="%{getText(top)}"/>
于 2013-01-23T09:36:05.780 に答える
0

これを試して:

public UpdateAction extends ActionSupport{
    protected Map<Object, String> productSold;
    public Map<Object, String> getProductSold() {
        Map<Object, String> myOptions= new HashMap<>();
           myOptions.put(null, "");
           myOptions.put(Boolean.TRUE, "Yes");
           myOptions.put(Boolean.FALSE, "No");
        return myOptions;
}

そしてJSPでは:

<s:select key="invoice.productSold" listKey="productSold.key"
          listValue="productSold.value"/>
于 2013-01-23T10:42:01.840 に答える