填充表单数据的Struts2导致Map <string,object =“”> </string,>的数组

时间:2013-06-12 07:11:10

标签: arrays forms jsp struts2 ognl

动作类

public class ProductAction extends ActionSupport implements Preparable {
    private Document product;
}

模型

public class Document {
    private Map<String, Object> properties;
}

JSP

<s:textfield name="product.properties.PRODUCT_NAME" 
             value="%   {product.properties..PRODUCT_NAME}" 
             label="%{getText('label.PRODUCT_NAME')}" size="40" />

<s:textfield name="product.properties.SUPPLIER" 
             value="%{product.properties.SUPPLIER}" 
             label="%{getText('label.SUPPLIER')}" size="40" />

Product_name和Supplier在地图(Map<String, String[]>)属性中填充为数组。

PRODUCT_NAME : [Ljava.lang.String;@4e96ac47]
SUPPLIER     : [Ljava.lang.String;@1c90a278]

如果我将Document-&gt;属性更改为Map<String, String>,则可以正常工作。

但由于其他数据类型,我希望将Document-&gt;属性保留为Map<String, Object>

如何解决此问题,我希望将表单数据填充为String而不是String[]

我没有多个同名文字字段。

4 个答案:

答案 0 :(得分:0)

试试这个

<s:textfield name="product.properties.SUPPLIER" 
             value="%{product.properties.SUPPLIER[0]}" 
             label="%{getText('label.SUPPLIER')}" size="40" />

这将检索数组中的第一项

答案 1 :(得分:0)

修改模型并介绍使用Map的方法,但将数据保存到基础Map,如下所示

public class Document {
    private Map<String, Object> properties;


    public Map<String, String> getStringProperties() {
        //logic to populate Map<String, String>
        return new HashMap<String, String>();
    }

    public void setStringProperties(Map<String, String> stringProperties) {
        properties.putAll(stringProperties);
    }
}

在jsp中使用stringProperties,如下所示

<s:textfield name="product.stringProperties.SUPPLIER" 
             value="%{product.stringProperties.SUPPLIER}" 
             label="%{getText('label.SUPPLIER')}" size="40" />

答案 2 :(得分:0)

答案 3 :(得分:0)

使用Element annotation比为此typedef struct { int x; int y; char style; } Pixel; Pixel *pixels = (Pixel *)malloc(9*128); 编写要容易得多。

TypeConverter