我有一个问题与Struts。它不能识别bean,即使它在
上方一行被定义我有这个代码
<logic:iterate id="com" name="Handler" property="commandList">
23: <optgroup id="${com.id}" style="display:none;">
24: <logic:iterate id="rem" name="com" property="remotes">
25: <option value="${rem.id}"><bean:write name="rem" property="name"/></option>
26: </logic:iterate>
27: </optgroup>
28: </logic:iterate>
,我在第25行得到以下错误:
javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot find bean: "rem" in any scope
这没有意义,因为bean是在上面第24行
定义的任何想法?由于
如您所述,代码的语法是正确的。我的猜测是,remotes
bean的对象之一是空值。在这种情况下,根据struts1引用:
如果要迭代的集合可以包含空值,则循环仍将执行,但不再执行页作用域属性(由Id属性)将为该循环迭代创建。你可以使用
<logic:present>
和<logic:notPresent>
标签测试这种情况。
将执行<bean:write name="rem" property="name"/>
标记,但rem将不存在于任何作用域中。检查null值在您的数组/列表/地图/remotes
等,或添加使用<logic:present>
标签的测试。