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. 在表单上选择“是”时 ConvertFromString 方法返回“true”,而 ConverToString 方法返回“false”。

动作类


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 = Yesandfalse = No放到您的消息属性中,然后使用标签的listValue属性<s:select>来调用getText方法来获取trueand的消息false

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

顺便说一句,您不需要在list属性内使用任何“特殊”符号来从值堆栈中获取值。

BTW no.2:您不需要productSold在操作中使用此方法,而是可以在 JSP 中使用列表的 OGNL 表示法定义您的是/否列表{...}

<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 回答