我看到这个问题出现了很多,所以我添加了明确的语法,并在最后添加了一个示例。
第一个问题是,据我所知,您不能轻松地将多个模型添加到表单中。
modelAttribute="productDTO" //is okay
modelAttribute="productDTO, vatDTO" //doesn't work
不像其他海报说的,只是尝试
${A.B.C}
如果 B 是需要自己的模型的对象,也将不起作用。简单的解决方案不是创建一个特殊的 DTO 来容纳所有额外的对象,而是向您的“productDTO”类添加一个额外的“getter”方法,该方法只返回一个字符串代码或其他简单类型:
public class ProductDTO implements Serializable {
private static final long serialVersionUID = -5974170234812308892L;
VatCode vatCode; //an object
public String getVatCodeAsString() {
return vatCode.getVATCode(); //useful if it's a code or something flat
}
public VatCode getVatCode() {
return vatCode(); //the JSP won't know what this model is
}
然后你可以在你的jsp页面中访问这个方法:
value="${productDTO.vatCodeAsString}
我使用它,我可以保证它有效。
但是,如果您需要访问复杂的对象,则语法如下:
在您的控制器中:
ProductAdminWebDTO productAdminWebDTO = new ProductAdminWebDTO();
productAdminWebDTO.setProductDTO(productService.getProductByID(prodNo));
modelAndView.addObject("productAdminWebDTO", productAdminWebDTO);
其中 ProductAdminWebDTO 包含:
private ProductDTO productDTO;
ProductDTO 包含:
private String productName; //(make sure to add correct getter, setters)
在您的 JSP 中:
<form:form method="post" id="viewForm"
action="GET" modelAttribute="productAdminWebDTO">
<form:input path="productDTO" id="productDTO" type="text" value="${productAdminWebDTO.productDTO.productName}"/>
请注意,顶级元素是“productAdminWebDTO”,但在路径中,您只添加与包含的变量对应的元素。但是完整的路径,(正如其他海报所指出的),在价值。