问题描述
我在网上找到个例子, 仿照做. 静态的没有问题. 但动态的就出来问题了. 各位帮忙看看问题怎么解决呢.Servlet.service() for servlet jsp threw exceptionjavax.servlet.jsp.JspException: Cannot find bean: "list" in any scopeAction相关代码:public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { ModelListForm modelListForm = (ModelListForm) form; List<Objects> modelList ; modelList = modelMgr.getAllModelNames(); request.setAttribute("list", modelList); return mapping.getInputForward(); }Objects类里面有 id 和 name两个属性. 也有相关的 getter, setter方法.ActionForm相关代码:private String select;public String getSelect() { return select; }public void setSelect(String select) { this.select = select; }JSP相关代码:<html:form action="/modelList.do"> <html:submit /> <html:select property="select"> <htmlptionsCollection name="list" label="name" value="id" /> </html:select> </html:form>struts配置文件相关: <action attribute="modelListForm" input="/pages/modelBody.jsp" name="modelListForm" path="/modelList" scope="request" />网上那个例子说, 如果直接在地址栏输入...modelList.do而不是/pages/modelBody.jsp就不会有这个问题. 但我想先读入页面, 然后按submit后, 再读入动态数据. 应该如何解决呢?问题补充:谢谢1L的回复. 但是这个方法是不是只能判断 list属性 是否在当前scope呢? 可我的问题现在报错说,list属性不存在。这个应该如何解决呢?
解决方案
楼主可以嵌套标签,用<logic:present>和<logic:notPresent>,<logic:present>用于检查request对象传递的参数是否存在,存在则执行标签体的内容,而<logic:notPresent>则是在<logic:present>标签检查的对象不存在的时候,执行标签体的内容。你的代码可以这样改:<html:form action="/modelList.do"><html:submit /><logic:present name="list"><html:select property="select"> <htmlptionsCollection name="list" label="name" value="id" /> </html:select> </logic:present><logic:notPresent name="list">//不存在时,你要执行的代码</logic:notPresent>不知道楼主要的是不是这样的效果,希望对楼主有所启发
解决方案二:
他是判断这个list属性,对应的Bean是否存在,也就是说,这个代码的效果就是,request.getAttribute("list");如果这个方法返回的是空,他就会执行<logic:notPresent>里内容。