【发布时间】:2015-09-11 04:02:17
【问题描述】:
我与Struts2 合作了很长时间。
当我使用 <s:textfield label="Product Id" key="%{productId}"/> 或 <s:textfield label="Product Id" key="[0].productId"/> 时,它不起作用。
即,如果我使用第一个带有指向 OGNL 表达式 %{productId} 的关键属性的标签,那么结果 html input tag's 名称属性将为空。即<input type="text" name="" value="" id="Product_Save_"/>。如果我使用<s:textfield label="Product Id" key="[0].productId"/> 标签,那么结果html input tag 是<input type="text" name="[0].productId" value="" id="Product_Save__0__productId"/>。
在这两种情况下,Struts 都无法将我的请求参数填充到我的产品类模型对象中,如下所示:
public class Product{
private String productId;
private String productName;
private int price;
private ProductOwner productOwner;
public Product() {}
public Product(String productId, String productName, int price) {
this.productId = productId;
this.productName = productName;
this.price = price;
}
public void setProductOwner(ProductOwner productOwner) {
this.productOwner = productOwner;
}
public ProductOwner getProductOwner() {
return productOwner;
}
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
如果我使用<s:textfield label="Product Id" key="productId"/>,那么 Struts 能够将productId 填充到Product 类productId 中。
但是当我使用<s:property value="%{[0].productId}"/> 时,它工作正常。
现在我的问题是为什么我不能使用像%{[0].productId} 这样的完整OGNL 表达式,但是在<s:property /> 标签中为什么我可以使用像%{[0].productId} 这样的完整OGNL 表达式。
【问题讨论】:
标签: struts2 ognl struts-tags