我在action中往jsp中发送了一个Iterator对象,像这样:request.setAttribute("department",departmentIt);
在jsp页面中用了两对 <html:select> </html:select>来迭代这个Iterator对象,第一个 <html:select> </html:select>如下: <html:select property="outDepartmentId" styleId="outDepartmentId">
<html:option value="">--请选择-- </html:option>
<logic:present name="department">
<logic:iterate id="dep" name="department">
<bean:define id="depId" name="dep" property="id"> </bean:define>
<html:option value=" <%=""+depId%>">
<bean:write name="dep" property="departmentName"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select> 第二个 <html:select> </html:select>中的代码和上面一模一样,只是 <html:select>中的property属性不同,为inDepartmentId,完整代码如下: <html:select property="inDepartmentId" styleId="inDepartmentId">
<html:option value="">--请选择-- </html:option>
<logic:present name="department">
<logic:iterate id="dep" name="department">
<bean:define id="depId" name="dep" property="id"> </bean:define>
<html:option value=" <%=""+depId%>">
<bean:write name="dep" property="departmentName"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select> 问题:在上面的第一个 <html:select> </html:select>中能够正确地迭代出Iteraotr对象中的内容,而第二个,也就是下面的那一个除了 <html:option value="">--请选择-- </html:option>这个option中有值之外,其他的option都为空。我已经几次遇到了这种问题,很奇怪,在同一个jsp页面中,一模一样的两段代码,为什么第一个可以正确的迭代,而第二个却不能,会不会是 <logic:iterator>标签在 <html:select>中使用的问题,两者不同的只是定义的property不同,到底是什么原因呢?被搞的很糊涂,热却期待您的回复,先谢谢了!!
在jsp页面中用了两对 <html:select> </html:select>来迭代这个Iterator对象,第一个 <html:select> </html:select>如下: <html:select property="outDepartmentId" styleId="outDepartmentId">
<html:option value="">--请选择-- </html:option>
<logic:present name="department">
<logic:iterate id="dep" name="department">
<bean:define id="depId" name="dep" property="id"> </bean:define>
<html:option value=" <%=""+depId%>">
<bean:write name="dep" property="departmentName"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select> 第二个 <html:select> </html:select>中的代码和上面一模一样,只是 <html:select>中的property属性不同,为inDepartmentId,完整代码如下: <html:select property="inDepartmentId" styleId="inDepartmentId">
<html:option value="">--请选择-- </html:option>
<logic:present name="department">
<logic:iterate id="dep" name="department">
<bean:define id="depId" name="dep" property="id"> </bean:define>
<html:option value=" <%=""+depId%>">
<bean:write name="dep" property="departmentName"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select> 问题:在上面的第一个 <html:select> </html:select>中能够正确地迭代出Iteraotr对象中的内容,而第二个,也就是下面的那一个除了 <html:option value="">--请选择-- </html:option>这个option中有值之外,其他的option都为空。我已经几次遇到了这种问题,很奇怪,在同一个jsp页面中,一模一样的两段代码,为什么第一个可以正确的迭代,而第二个却不能,会不会是 <logic:iterator>标签在 <html:select>中使用的问题,两者不同的只是定义的property不同,到底是什么原因呢?被搞的很糊涂,热却期待您的回复,先谢谢了!!
解决方案 »
- 第一次进这个论坛请多多关照啊,想找个企业真实项目模块做一下,不知谁有?
- 在apache提供的下载链接中下载整个struts
- JSF在JBoss4.2.2 GA上部署出现java.lang.ClassCastException
- 请求帮助~如何把"忘记密码"的密码返回的用户个人邮箱
- 大家看看 急急急 :jsp 开发tomcat,sql server (我在旁等)
- SSH整合错误
- 我有一个一字段是用来存新闻内容的,用varchar2不够用,我想用blob,可又不会!
- 文件上传到数据库出错,请您帮忙!!!
- 在JSP中怎样调用DLL,一定给分
- servlet?
- 怎样在类中执行一个字符串中所包含的代码
- java有没什么好用的文本编辑工具,能编辑插入Flash的
1.你的inDepartmentId是不是本身就没有东西
2.记得好像struts的标签嵌套有问题 你可以不用<html:option>而用普通的<option>试试
意思就是在action中返回一个Iterator对象,然后在<html:select></html:select>中用<logic:iterate>迭代取值,两段相同的代码,在同一个jsp文件中,第一段可以正常迭代,而第二段却不能迭代取值,可确定那个Iterator对象已经发送回页面了。
谢谢popyy0101 :
1.inDepartmentId是我在<html:select>标签中定义的一个javaBean的property,所以这个property原本是不存在的,定义了之后方便在formBean中获取它的值。
2.第一段代码的嵌套迭代是可以的,不知道是struts不稳定还是其他什么原因,嵌套迭代我之前都可以正常使用,只是最近用到了<html:select>标签中出现了上述问题,可是奇怪的是如果迭代有问题,和第二段代码一模一样的第一段为什么就可以正常迭代呢,搞不明白这点,两段代码是写个同一个jsp页面中的,而且可以确定Iterator对象已经成功发送回这样jsp页面,要不然第一段代码也不会取到值了。谢谢关注!呵呵...被这个问题困扰很长时间了,一直找不到解决方法。
是自己定义的??
你要它做什么
第二次仍然使用了<logic:iterate id="dep" name="department">这个代码 这时候系统发现刚才已经定义了这个ID的迭代器 所以没有重新分配一个 而是使用了刚才的那个
而这个ID的迭代器 刚才已经迭代到department的末尾了 所以第二次使用实际是从末尾开始迭代 所以没有东西
也正因为这样 你把第一段删了 第二段就正常 因为它直接用第二段的开始迭代
如果你把一二段换个位置 那肯定第二段能使用 第一段又不正常了
department 是action中定义的attribute的名称,request.setAttribute("department",departmentIt),其中departmentIt是一个Iterator对象。我这样是为了判断这个对象是否存在并成功发送回页面,去掉之后第二段代码还是不能正确迭代,问题应该跟这个无关。把成功的那段去掉,第二段代码是可以正常迭代取值的,很奇怪
popyy0101: 我在action中重复发送了刚才那个Iterator对象,第一个是request.setAttribute("department",deparmentIt)
第二个是request.setAttribute("department2",departmentIt),发送同一个对象,只不过attribute的标识不同,这样在刚才的那个jsp页面中第二段代码使用第二个,<logic:iterate id="dep2" name="department2"> ,ID也改了,可是这样也不能迭代,如果如你所说,现在迭代器改变了,虽然也是迭代同一个对象,但是为什么也不行呢?
而且<logic:iterate id="dep2" name="department2"> 我记得iterate标签里的name属性是指的要迭代的bean的名字 你似乎没有department2这个bean
我建议第二个写成 <logic:iterate id="dep2" name="department"> 试试
而且bean:define写成<bean:define id="depId2" name="dep2" property="id"> </bean:define>
下面写成<html:option value=" <%=""+depId2%>">
我这些都是想着说的 也没实验 再不行你把你的department这个bean的定义发出来我看一下
可能像你所说的那样,虽然我在action中也定义了标识是department2的attribute,但是使用的bean还是departmentIt,也就是一个Iterator对象,两个不同标识的attribute使用了同一个bean,应该是指向相同的内存地址。改成<logic:iterate id="dep2" name="department"> 这样我已经试过了,也是不行的,下面是我在action中定义的bean:List<Department> departmentList=null;
try
{
departmentList=departmentDAO.getAllDepartment();
}
catch (Exception e)
{
e.printStackTrace();
}Iterator<Department> departmentIt=departmentList.iterator();request.setAttribute("department", departmentIt);就这样了,发现上述问题之后,我增加了这个request.setAttribute("department2", departmentIt);
使用<logic:iterate id="dep2" name="department2"> ,一样的不行。谢谢楼上所有朋友对本帖的关注,谢谢!!
如果是getter有问题的话第一段代码就不会正常迭代了,但是第一段代码是可以正常迭代出来的,你是试了我发的这两段代码的吗?
<html:option value="">--请选择-- </html:option>
<logic:present name="department">
<logic:iterate id="dep2" name="department">
<bean:define id="depId2" name="dep2" property="id"> </bean:define>
<html:option value=" <%=""+depId2%>">
<bean:write name="dep2" property="departmentName"/>
</html:option>
</logic:iterate>
</logic:present>
</html:select> 把你的action中的request.setAttribute的几项都去掉 然后确定红色的部分都替换了
再试试吧
所以虽然有数据第一次迭代正常,第二次就不对了。其实把标签代码优化优化,也可以只iterate一次的。
直接用用<html:optionsCollection></html:optionsCollection>不就可以了使用方法如下:
<html:select>
<html:optionsCollection property="department"
lable="departmentName"
value="depId">
</html:optionsCollection>
</html:select>这多简单