Struts2 中的关键属性 OGNL 问题
key attribute OGNL issue in Struts2
我已经与 Struts2
合作了很长时间。
当我使用 <s:textfield label="Product Id" key="%{productId}"/>
或 <s:textfield label="Product Id" key="[0].productId"/>
时,它不起作用。
即,如果我使用第一个带有指向 OGNL 表达式 %{productId}
的键属性的标签,那么结果 html
input tag's
name 属性将作为 empty.i.e。 <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 无法将我的请求参数填充到我的模型对象中,即产品 class,如下所示:
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
class productId
.
但是当我使用 <s:property value="%{[0].productId}"/>
它工作正常。
现在我的问题是为什么我不能使用像 %{[0].productId}
这样的完整 OGNL 表达式,但是在 <s:property />
标签中 为什么我可以使用像 %{[0].productId}
.[=30= 这样的完整 OGNL 表达式]
key="%{productId}
不起作用,因为使用 %{}
是在强制表达式求值,而 productId
中没有值,因此 name
属性为空.
key="[0].productId"
是一个正确的表达式,在OGNL中正常工作,但是因为它有一定的安全隐患所以不允许使用这个表达式在Struts2中设置值。当然,允许通过此表达式获取值,因此 <s:property value="[0].productId"/>
有效。
我已经与 Struts2
合作了很长时间。
当我使用 <s:textfield label="Product Id" key="%{productId}"/>
或 <s:textfield label="Product Id" key="[0].productId"/>
时,它不起作用。
即,如果我使用第一个带有指向 OGNL 表达式 %{productId}
的键属性的标签,那么结果 html
input tag's
name 属性将作为 empty.i.e。 <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 无法将我的请求参数填充到我的模型对象中,即产品 class,如下所示:
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
class productId
.
但是当我使用 <s:property value="%{[0].productId}"/>
它工作正常。
现在我的问题是为什么我不能使用像 %{[0].productId}
这样的完整 OGNL 表达式,但是在 <s:property />
标签中 为什么我可以使用像 %{[0].productId}
.[=30= 这样的完整 OGNL 表达式]
key="%{productId}
不起作用,因为使用 %{}
是在强制表达式求值,而 productId
中没有值,因此 name
属性为空.
key="[0].productId"
是一个正确的表达式,在OGNL中正常工作,但是因为它有一定的安全隐患所以不允许使用这个表达式在Struts2中设置值。当然,允许通过此表达式获取值,因此 <s:property value="[0].productId"/>
有效。