根據官網的
快速開始指南和
SpringSide 復活兩篇文章,簡單了解ss3的大致框架,并成功建立基于ss3風格的項目。
但其中也遇到幾個小問題,首先就是Maven,由于以前安裝過可能有些配置被改變了導致無法正常執行quickstart-all-in-one.bat。后來直接指定ss3中的maven目錄就可以了,懷疑是maven\conf\settings.xml問題。另外一個問題就是在建立自己的項目后,執行copy-jar.bat總是不成功(有功夫要好好研究一下maven),最后只好直接把examples\mini-web\lib和examples\mini-web\webapp\WEB-INF\lib下的jar都拷過來。
建好了項目準備自己添加點功能試試,可是沒有找到能夠自動生成代碼的腳本,只好自己一點點添加,還好ss3在配置方面簡便了許多。
1、生成實體類
@Entity
@Table(name = "dict_nation")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Nation extends IdEntity {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
2、生成dao、service類
@Repository
public class NationDao extends HibernateDao<Nation, Long> {
public Nation loadByName(String name) {
return findUniqueByProperty("name", name);
}
}
@Service
@Transactional
public class NationManager extends EntityManager<Nation, Long> {
@Autowired
private NationDao nationDao;
@Override
public NationDao getEntityDao() {
return nationDao;
}
public Nation getNation(String name) {
return nationDao.loadByName(name);
}
}
以上操作都不用修改配置文件,真是很方便。
3、生成web相關文件
@SuppressWarnings("serial")
@Results( { @Result(name = CRUDActionSupport.RELOAD, location = "nation.action", type = "redirect") })
public class NationAction extends CRUDActionSupport<Nation> {
@Autowired
private NationManager nationManager;
// 基本屬性
private Nation entity;
private Long id;
private List<Nation> allNations;
public Nation getModel() {
return entity;
}
@Override
protected void prepareModel() throws Exception {
if (id != null) {
entity = nationManager.get(id);
} else {
entity = new Nation();
}
}
public void setId(Long id) {
this.id = id;
}
public List<Nation> getAllNations() {
System.out.println("test");
return allNations;
}
@Override
public String delete() throws Exception {
try {
nationManager.delete(id);
addActionMessage("刪除角色成功");
} catch (ServiceException e) {
logger.error(e.getMessage(), e);
addActionMessage(e.getMessage());
}
return RELOAD;
}
@Override
public String list() throws Exception {
allNations = nationManager.getAll();
return SUCCESS;
}
@Override
public String input() throws Exception {
System.out.println("test");
return INPUT;
}
@Override
public String save() throws Exception {
nationManager.save(entity);
addActionMessage("保存用戶成功");
return RELOAD;
}
}
修改安全文件applicationContext-security.xml
<intercept-url pattern="/user/nation!save*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/user/nation!delete*" access="A_MODIFY_ROLE" />
<intercept-url pattern="/user/nation*" access="A_VIEW_ROLE" />
添加nation.jsp和nation-input.jsp文件
<body>
<div id="menu">
<h3>
<a href="${ctx}/user/user.action">帳號列表</a>
<a href="${ctx}/user/role.action">角色列表</a>
<a href="${ctx}/user/nation.action">國籍列表</a>
<a href="${ctx}/j_spring_security_logout">退出登錄</a>
</h3>
</div>
<div id="message"><s:actionmessage theme="mytheme"/></div>
<div id="filter">你好,<%=SpringSecurityUtils.getCurrentUserName()%>.</div>
<div id="listContent">
<table>
<tr>
<th><b>名稱</b></th>
<th><b>操作</b></th>
</tr>
<s:iterator value="allNations">
<tr>
<td>${name}</td>
<td>
<security:authorize ifAnyGranted="A_MODIFY_ROLE">
<a href="nation!input.action?id=${id}">修改</a>、
<a href="nation!delete.action?id=${id}">刪除</a>
</security:authorize>
</td>
</tr>
</s:iterator>
</table>
</div>
<div id="footer">
<security:authorize ifAnyGranted="A_MODIFY_ROLE">
<a href="nation!input.action">增加新國籍</a>
</security:authorize>
</div>
<div id="comment">本頁面為單純的白板,各式Table Grid組件的應用見Showcase項目(開發中).</div>
</body>
<body>
<h3><s:if test="id == null">創建</s:if><s:else>修改</s:else>角色</h3>
<div id="inputContent">
<form id="inputForm" action="nation!save.action" method="post">
<input type="hidden" name="id" value="${id}" />
<table>
<tr>
<td>國籍:</td>
<td><input type="text" name="name" size="40" value="${name}" class="required"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="提交" />
<input type="button" value="取消" onclick="history.back()"/>
</td>
</tr>
</table>
</form>
</div>
</body>
完成。重新部署、運行,可以執行對國籍的增刪改查。
雖然最終成功使用,但是其中遇到一個非常惱火的事情。由于定義的表名是dict_nation所以后面相關的名稱都是DictNation和dictNation,結果新增的功能無法實現,懷疑是違反了某個框架的命名規范,導致無法實現,有空再深入學習ss3。