我遇到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行上面定义了
有什么想法吗? 感谢
答案 0 :(得分:1)
正如您所说,代码的语法是正确的。我的猜测是remotes
bean的一个对象是一个空值。在这种情况下,根据struts1 reference:
如果您正在迭代的集合可以包含空值,那么 仍将执行循环,但没有页面范围属性(由 将为该循环迭代创建id属性)。你可以使用 <{1}}和
<logic:present>
代码用于测试此案例。
将执行<logic:notPresent>
标记,但rem不会存在于任何范围内。检查数组/列表/地图/等<bean:write name="rem" property="name"/>
中的空值,或使用remotes
标记添加测试。