Я давно работаю с 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}"/>
, он работает правильно.
Теперь мой вопрос: почему я не могу использовать полные выражения OGNL, такие как %{[0].productId}
, но в теге <s:property />
Почему я могу использовать полные выражения OGNL, такие как %{[0].productId}
.