【问题标题】:struts2 don't display collections on jsp pagestruts2不在jsp页面上显示集合
【发布时间】:2012-08-26 11:04:24
【问题描述】:

我开始学习struts2,不知道很多,请各位老师帮帮我。 我有这样的动作课

public class LoginAction extends ActionSupport {

    private String login;
    private String password;
    private Collection<News> newses = new ArrayList<News>();

    public String execute() {
        UserDao userDao = new UserDao();
        if(userDao.checkUser(getLogin(),getPassword())){
            NewsDao newDao = new NewsDao();
            setNewses(newDao.getAllNews());
            return SUCCESS;
        }
        return ERROR;

    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Collection<News> getNewses() {
        NewsDao newDao = new NewsDao();
        setNewses(newDao.getAllNews());
        return newses;
    }

    public void setNewses(Collection<News> newses) {
        this.newses = newses;
    }
}

当执行方法返回成功时,它重定向到news.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title><s:text name="news.page.title"/></title>
</head>
<body>
      <s:text name="news.page.main.label"/>
      <s:iterator status="stat" value="newses">
          <s:property value="title"/>
          <s:property value="body"/>
          <s:property value="user.name"/>
      </s:iterator>

      <s:include value="../jspf/footer.jsp" />
</body>
</html>

但结果显示如下

并且不显示我的收藏..(带有页脚按钮的文本字段和文本区域) 帮助我,请告诉我我做错了什么 谢谢

【问题讨论】:

  • 为什么 value="newses"?当您的 setter/getter 是 getNews 时?不应该获取/设置与属性名称不同步?
  • 很高兴它对您有所帮助。我发布为答案。如果它帮助您通过单击刻度线接受。
  • FWIW,“newes”不是一个词。最好将其命名为“newsItems”或仅命名为“news”。

标签: java jsp struts2 tags


【解决方案1】:

您的 getter/setter 应与属性名称同步。

例子:

getNewses()
{
...
}

不是

 getNews(){ ...}

【讨论】:

    【解决方案2】:

    (不是答案。)

    三个cmets:

    1. 您的新闻项 getter实例化了一个 NewsDao,您应该决定是在 getter 中执行此操作,还是在操作的 execute 方法中执行此操作。
    2. 您将代码绑定到特定的 DAO 实现。如果您只是在玩玩,那很好,但为了使事情保持可测试性并与实现隔离,您最好允许注入 DAO 实现。
    3. execute 方法的结构不便于理解:失败更快。
    public String execute() {
        if (!userDao.validUser(login, password)) {
            return ERROR;
        }
    
        setNews(newDao.getAllNews());
        return SUCCESS;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多