在JSP / JSTL中,如何为class =“ java.util.ArrayList”的usebean设置值。
如果我尝试使用c:set属性或值,则会收到以下错误:javax.servlet.jsp.JspTagException:无效的属性:“空”
这不是直接可能的。有<c:set>and <jsp:setProperty>标记,可让您通过setter方法在完全有价值的javabean中设置属性。但是,该List接口没有设置器,只有一个add()方法。
<c:set>
<jsp:setProperty>
List
add()
一种 解决方法 是将列表包装在真正的javabean中,如下所示:
public class ListBean { private List<Object> list = new ArrayList<Object>(); public void setChild(Object object) { list.add(object); } public List<Object> getList() { return list; } }
并设置为
<jsp:useBean id="listBean" class="com.example.ListBean" scope="request" /> <jsp:setProperty name="listBean" property="child" value="foo" /> <jsp:setProperty name="listBean" property="child" value="bar" /> <jsp:setProperty name="listBean" property="child" value="waa" />
但这毫无意义。如何正确解决问题取决于唯一的功能要求。如果要List在GET请求中保留某些内容,则应使用预处理servlet。创建一个在doGet()方法中执行以下操作的servlet :
doGet()
List<String> list = Arrays.asList("foo", "bar", "waa"); request.setAttribute("list", list); request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
当通过URL调用servlet时,该列表位于转发的JSP中,可通过以下方式使用:
${list}
无需 老式<jsp:useBean>标签。在servlet中,您可以自由地以通常的方式编写Java代码。这样,您就可以仅使用JSP进行纯演示,而无需通过<jsp:useBean>标签来吞噬/破解某些预处理逻辑。
<jsp:useBean>