动作类
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[]
。
我没有多个同名文字字段。
答案 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)
解决方案:我们可以将类型Converter应用于bean或模型 http://struts.apache.org/release/2.3.x/docs/type-conversion.html#TypeConversion-ApplyingaTypeConvertertoabeanormodel
答案 3 :(得分:0)
使用Element annotation比为此typedef struct {
int x;
int y;
char style;
} Pixel;
Pixel *pixels = (Pixel *)malloc(9*128);
编写要容易得多。
TypeConverter