访问JSTL中的嵌套对象到JSP页面

时间:2013-02-05 11:05:27

标签: java spring jsp nested jstl

我有两节课:

让我们说

class ABC{

private String a,b;

public void setA(String a){
this.a = a;
}

public void setB(String b){
this.b = b;
}

public String getA(){
return this.a;
}

public String getB(){
return this.b ;
}

}



class XYZ{

private ABC abc;

public void setABC(ABC abc){
this.abc = abc;
}

public ABC getABC(){
return this.abc;
}

}

具有ABC类属性的类XYZ。

我想在JSTL的帮助下访问JSP页面中的ABC类属性a或b 以这种方式

${XYZ.ABC.A}

4 个答案:

答案 0 :(得分:3)

要在JSP中引用bean,需要将对象放入请求中。

request.setAttribute("xyz", xyz);

然后通过JSP中的${xyz.abc.a}访问它。

答案 1 :(得分:0)

可以使用JSTL标签。试试这个 $ {XYZ object name.abc.a}

答案 2 :(得分:0)

而不是

public void setABC(ABC abc){
this.abc = abc;
}

public ABC getABC(){
return this.abc;
}

使用

public void setAbc(ABC abc){
this.abc = abc;
}

public ABC getAbc(){
return this.abc;
}

使用此JSTL语法$ {XYZ.abc.a}

检索信息

答案 3 :(得分:0)

我看到这个问题出现了很多,所以我添加了明确的语法,并在最后添加了一个例子。

第一个问题是,据我所知,您无法轻松地将多个模型添加到表单中。

modelAttribute="productDTO" //is okay

modelAttribute="productDTO, vatDTO" //doesn't work

与其他海报不同,只是尝试

${A.B.C}
如果B是需要自己模型的对象,

也将无效。简单的解决方案,而不是创建一个特殊的DTO只是为了容纳所有额外的对象是添加额外的" getter"你" productDTO"的方法class,一个只返回String代码的类,或其他简单类型:

   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}"/>

请注意,顶级元素是&#34; productAdminWebDTO&#34;,但在路径中,您只添加与包含的变量对应的元素。但是完整的路径(正如其他海报所指出的那样),在价值中。