【问题标题】:How to "logic:iterate" just one object?如何“逻辑:迭代”一个对象?
【发布时间】:2023-03-22 06:59:01
【问题描述】:

所以,我有这个代码:

logic:iterate name="nameForm" property="name" id="nameId" indexId="index"
bean:write name="nameId" property="field1"/
bean:write name="nameId" property="field2"/

这很好用,因为我收到了一个“对象表”,所以我可以毫无问题地进行迭代。

现在,在另一个页面上,我需要做同样的事情,但问题是我收到的不是“对象表”而是对象本身。 尽管如此,我还是尝试了它,并且 - 正如预期的那样 - 得到了错误:无法为此集合创建迭代器

我已经完成了 RTFM,但我仍然比以前更加困惑。
我知道“逻辑:迭代”中的“名称”如何指向 struts-config 中的表单名称,现在我需要对 一个 bean 做同样的事情,请帮忙?

【问题讨论】:

    标签: java jsp collections struts javabeans


    【解决方案1】:

    您可以使用带有<logic:iterate> 的bean 名称,但它应该是一个集合或数组,或者实现IterableHere是标签使用的例子。

    在 Struts 中,您可以使用 logic:iterate 标签来迭代集合。示例如下:

    遍历列表/数组(对象)

    创建一个包含少量"user" 对象的普通列表,并将其存储到HttpServletRequest 中,名称为"listUsers"

    public class User{
    
      String username;
      String url;
    
        //getter and setter methods
    }
    
    
    ...
    
    public class PrintMsgAction extends Action{
    
      public ActionForward execute(ActionMapping mapping,ActionForm form,
          HttpServletRequest request,HttpServletResponse response) 
            throws Exception {
    
          List<User> listUsers = new ArrayList<User>();
    
          listUsers.add(new User("user1", "http://www.user1.com"));
          listUsers.add(new User("user2", "http://www.user2.com"));
          listUsers.add(new User("user3", "http://www.user3.com"));
          listUsers.add(new User("user4", "http://www.user4.com"));
    
          request.setAttribute("listUsers", listUsers);
    
          return mapping.findForward("success");
      }
    
    }
    

    在逻辑标签内,可以使用"name"属性(listUsers)获取列表值,而"property"属性显示对象属性值。

    <%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
    <%@taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
    <html>
    <head>
    </head>
    <body>
    <h1>Struts <logic:iterate> example</h1>
    
    <logic:iterate name="listUsers" id="listUserId">
    <p>
      List Users <bean:write name="listUserId" property="username"/> , 
      <bean:write name="listUserId" property="url"/>
    </p>
    </logic:iterate>
    
    </body>
    </html>
    

    【讨论】:

    • 问题是我没有列表或表格。在程序的这一部分,我只是发送一个对象,我想以这种方式继续它;有什么方法可以指向一个对象,还是必须创建一个包含 1 个项目的数组才能使其工作?
    • @Johns 如果要迭代包含该对象的数组,可以将对象包装到数组中。
    • 就是这样,我宁愿学习如何正确地只显示一个项目/对象,而不是作弊和创建一个项目的列表,因为我不知道更好......
    • @Johns 你可以用很多不同的方式来展示它,但是你选择了问如何使用&lt;logic:iterate&gt;标签来完成想要的。
    • 真的吗?读完所有这就是你得到的?我的错,我不知道我在期待什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2011-09-24
    • 1970-01-01
    相关资源
    最近更新 更多