1

动作类

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 ( Map<String, String[]>) 属性中填充为数组。

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

如果我将 Document->properties 更改为Map<String, String>它工作正常。

Map<String, Object>但由于其他数据类型,我想保留 Document->properties 。

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

我没有多个具有相同名称的文本字段。

4

4 回答 4

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" />
于 2013-06-14T18:02:46.610 回答
0

解决方案:我们可以将类型转换器应用于 bean 或模型 http://struts.apache.org/release/2.3.x/docs/type-conversion.html#TypeConversion-ApplyingaTypeConvertertoabeanormodel

于 2013-06-19T06:51:52.443 回答
0

尝试这个

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

这将检索数组中的第一项

于 2013-06-12T09:20:50.847 回答
0

使用元素注释TypeConverter为此编写要容易得多。

@Element( value = java.lang.String.class )
private Map<String, Object> properties;
于 2017-06-29T16:23:09.313 回答