承接上篇 Model 層 (iBatis),本篇實作新聞管理的 Action 與 JSP 頁面:列表、新增、修改、刪除完整 CRUD,採用約定式映射與註解配置,JSP 放置於 WEB-INF/content/admin/ 目錄。
WEB-INF/content/admin/article.jsp // 列表頁
WEB-INF/content/admin/article-input.jsp // 新增/修改頁
src/cn/simple/action/admin/ArticleAction.java
@Results({
@Result(name="success", location="article.jsp"),
@Result(name="input", location="article-input.jsp"),
@Result(name="reload", location="article.action", type="redirect")
})
public class ArticleAction extends ActionSupport {
private List<Article> articles;
private Article article;
@Override public String execute() throws Exception { return list(); }
public String list() throws Exception {
articles = ArticleManager.selectAllArticles();
return SUCCESS;
}
public String input() throws Exception {
if (article != null && article.getId() != 0) { // 修改
article = ArticleManager.queryArticleById(article.getId());
} else { // 新增
article = new Article();
}
return INPUT;
}
public String save() throws Exception {
article.setPubtime(new Date());
if (article.getId() == 0) ArticleManager.insertArticle(article);
else ArticleManager.updateArticle(article);
return "reload"; // 重導列表頁
}
public String delete() throws Exception {
ArticleManager.deleteArticle(article.getId());
return "reload";
}
// getter/setter 省略
}
| 操作 | URL | 對應方法 |
|---|---|---|
| 列表 | /admin/article.action 或 /admin/article!list.action | list() |
| 新增頁 | /admin/article!input.action | input() |
| 修改頁 | /admin/article!input.action?id=4 | input() |
| 儲存 | /admin/article!save.action (POST) | save() |
| 刪除 | /admin/article!delete.action?article.id=4 | delete() |
<%@ taglib prefix="s" uri="/struts-tags" %>
<h5><a href="article.action">新聞列表</a> -- <a href="article!input.action">發表新聞</a></h5>
<table border="1" cellspacing="0" cellpadding="0">
<tr><th>編號</th><th>標題</th><th>作者</th><th>時間</th><th>管理</th></tr>
<s:iterator value="articles">
<tr>
<td>${id}</td><td>${title}</td><td>${author}</td>
<td><s:date name="pubtime" format="yyyy/MM/dd"/></td>
<td>
<a href="article!input.action?article.id=${id}">編輯</a> |
<a href="article!delete.action?article.id=${id}">刪除</a>
</td>
</tr>
</s:iterator>
</table>
<form action="article!save.action" method="post">
<input type="hidden" name="article.id" value="${article.id}"/>
<table>
<tr><th>標題</th><td><input type="text" name="article.title" value="${article.title}"/></td></tr>
<tr><th>作者</th><td><input type="text" name="article.author" value="${article.author}"/></td></tr>
<tr><th>內容</th><td><textarea name="article.content" rows="20" cols="70">${article.content}</textarea></td></tr>
<tr><td><input type="submit" value="儲存"/></td></tr>
</table>
</form>
https://localhost:8060/SimpleWeb/admin/article.action 進入列表struts.xml,方法名直接對應 !methodName@Result 定義結果視圖,type="redirect" 實現 PRG 模式避免重複提交success/input 可省略,但顯式寫出利於初學者理解