1

私はstruts2を学び始めましたが、その多くがfeachersが私を助けてくれることを知りません。そんなアクションクラスがあります

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;
    }
}

executeメソッドがSuccessを返すと、リダイレクト先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>

しかし、結果として、このようなものが表示されます ここに画像の説明を入力してください

コレクションを表示しないでください。(フッターページのボタン付きのテキストフィールドとテキストエリア)私が間違ったことを教えてくださいありがとうございます

4

2 に答える 2

3

ゲッター/セッターは属性名と同期している必要があります。

例:

getNewses()
{
...
}

いいえ

 getNews(){ ...}
于 2012-08-31T15:44:32.343 に答える
1

(答えではありません。)

3つのコメント:

  1. ニュースアイテムのゲッターインスタンス化します。ゲッターでそれを行うか、アクションのメソッドNewsDaoで行うかを決定する必要があります。execute
  2. コードを特定のDAO実装に結び付けています。遊んでいるだけなら問題ありませんが、テスト可能で実装から分離された状態を維持するには、DAO実装を注入できるようにする方がよいでしょう。
  3. このexecute方法は、理解を容易にするように構成されていません。失敗が早くなります。
public String execute() {
    if (!userDao.validUser(login, password)) {
        return ERROR;
    }

    setNews(newDao.getAllNews());
    return SUCCESS;
}
于 2012-08-31T15:58:18.313 に答える