spring的portlet改进(二)支持CURD标注controller
controller层标注应用的后台是manager层,这层只做了简单的MOCK,代码如下,
接口文件AddressManager.java
package com.sillycat.easyportlet.services;
import java.util.List;
import com.sillycat.easyportlet.model.Address;
public interface AddressManager {
public Address get(Integer id);
public List<Address> list();
public void delete(Integer id);
public void create(Address address);
public void update(Address address);
}
实现文件AddressManagerImpl.java:
package com.sillycat.easyportlet.services.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sillycat.easyportlet.model.Address;
import com.sillycat.easyportlet.services.AddressManager;
public class AddressManagerImpl implements AddressManager {
public Map<Integer, Address> map = new HashMap<Integer, Address>();
public Address get(Integer id) {
Address a = null;
if (map != null && !map.isEmpty()) {
a = map.get(id);
}
return a;
}
public List<Address> list() {
List<Address> list = null;
if (map != null && !map.isEmpty()) {
list = new ArrayList<Address>(map.size());
Iterator<Integer> itkey = map.keySet().iterator();
for (; itkey.hasNext();) {
Integer id = itkey.next();
list.add(map.get(id));
}
}
return list;
}
public void create(Address address) {
Date d = new Date();
address.setId((new Long(d.getTime()).intValue()));
map.put(address.getId(), address);
}
public void update(Address address) {
if (map != null && !map.isEmpty()) {
if (map.containsKey(address.getId())) {
map.put(address.getId(), address);
}
}
}
public void delete(Integer id) {
if (map != null && !map.isEmpty()) {
if (map.containsKey(id)) {
map.remove(id);
}
}
}
}
这些方法都没有什么特别,和平时的MANAGER一致。POJO
package com.sillycat.easyportlet.model;
import java.io.Serializable;
public class Address implements Serializable {
private static final long serialVersionUID = 5306372860419718840L;
private Integer id;
private String name;
private String address;
private String telphone;
private String mobile;
private String email;
...getter 和setter
}
页面撰写,调用不同的模式,实现编辑模式的CRUD,VIEW模式的LIST和VIEW
首先引入WEB-INF/portlets/easyportlet/taglibs.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
新增页面addressAdd.jsp
<%@ include file="taglibs.jsp" %>
<h1>Add Address</h1>
<portlet:actionURL var="formAction" portletMode="edit">
<portlet:param name="action" value="save"/>
</portlet:actionURL>
<form:form modelAttribute="address" method="post" action="${formAction}">
<form:errors path="*" cssStyle="color:red"/>
<form:hidden path="id" />
<table>
<tr>
<td>名字: </td>
<td><form:input path="name" size="20" maxlength="20" /></td>
</tr>
<tr>
<td>地址: </td>
<td><form:input path="address" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>座机: </td>
<td><form:input path="telphone" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>手机: </td>
<td><form:input path="mobile" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>邮箱: </td>
<td><form:input path="email" size="20" maxlength="255"/></td>
</tr>
</table>
<button type="submit">提交</button>
</form:form>
编辑页面addressEdit.jsp
<%@ include file="taglibs.jsp" %>
<h1>Add Address</h1>
<portlet:actionURL var="formAction" portletMode="edit">
<portlet:param name="action" value="save"/>
</portlet:actionURL>
<form:form modelAttribute="address" method="post" action="${formAction}">
<form:errors path="*" cssStyle="color:red"/>
<form:hidden path="id" />
<table>
<tr>
<td>名字: </td>
<td><form:input path="name" size="20" maxlength="20" /></td>
</tr>
<tr>
<td>地址: </td>
<td><form:input path="address" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>座机: </td>
<td><form:input path="telphone" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>手机: </td>
<td><form:input path="mobile" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>邮箱: </td>
<td><form:input path="email" size="20" maxlength="255"/></td>
</tr>
</table>
<button type="submit">提交</button>
</form:form>
EDIT模式的列表页面addressList.jsp
<%@ include file="taglibs.jsp" %>
<h1>Address</h1>
<form method="post" action="<portlet:actionURL/>">
<c:forEach items="${addresses}" var="item">
<c:out value="${item.id}"/>
<c:out value="${item.name}" />
<c:out value="${item.address}" />
<c:out value="${item.telphone}" />
<c:out value="${item.mobile}" />
<c:out value="${item.email}" />
<a href="<portlet:actionURL portletMode="edit">
<portlet:param name="action" value="delete"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:actionURL>">
删除</a> |
<a href="<portlet:renderURL portletMode="edit">
<portlet:param name="action" value="edit"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:renderURL>">
编辑</a>
<br/>
</c:forEach>
<br/>
</form>
<br/>
<a href="<portlet:renderURL portletMode="edit">
<portlet:param name="action" value="add"/>
</portlet:renderURL>">
新增</a>
| 返回
<a href="<portlet:renderURL portletMode="view"/>">
查看模式
</a>
VIEW模式的列表页面addressListView.jsp
<%@ include file="taglibs.jsp" %>
<h1>Address</h1>
<form method="post" action="<portlet:actionURL/>">
<c:choose>
<c:when test="${empty addresses}">
<p>
当前没有地址记录
</p>
</c:when>
<c:otherwise>
<c:forEach items="${addresses}" var="item">
<c:out value="${item.id}"/>
<c:out value="${item.name}" />
<c:out value="${item.address}" />
<c:out value="${item.telphone}" />
<c:out value="${item.mobile}" />
<c:out value="${item.email}" />
<a href="<portlet:renderURL portletMode="view">
<portlet:param name="action" value="view"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:renderURL>">
查看</a>
<br />
</c:forEach>
<br/>
</c:otherwise>
</c:choose>
</form>
<br/>
<a href="<portlet:renderURL portletMode="edit"/>">
编辑模式
</a>
VIEW模式的查看页面addressView.jsp
<%@ include file="taglibs.jsp"%>
<h1>Add Address</h1>
<table>
<tr>
<td>序号:</td>
<td><c:out value="${address.id}" /></td>
</tr>
<tr>
<td>名字:</td>
<td><c:out value="${address.name}" /></td>
</tr>
<tr>
<td>地址:</td>
<td><c:out value="${address.address}" /></td>
</tr>
<tr>
<td>座机:</td>
<td><c:out value="${address.telphone}" /></td>
</tr>
<tr>
<td>手机:</td>
<td><c:out value="${address.mobile}" /></td>
</tr>
<tr>
<td>邮箱:</td>
<td><c:out value="${address.email}" /></td>
</tr>
</table>
<a href="<portlet:renderURL portletMode="view"/>">
返回
</a>
另外几个jsp,比如error.jsp,unaailable.jsp是在出现异常的时候调用的。
controller层标注应用的后台是manager层,这层只做了简单的MOCK,代码如下,
接口文件AddressManager.java
package com.sillycat.easyportlet.services;
import java.util.List;
import com.sillycat.easyportlet.model.Address;
public interface AddressManager {
public Address get(Integer id);
public List<Address> list();
public void delete(Integer id);
public void create(Address address);
public void update(Address address);
}
实现文件AddressManagerImpl.java:
package com.sillycat.easyportlet.services.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.sillycat.easyportlet.model.Address;
import com.sillycat.easyportlet.services.AddressManager;
public class AddressManagerImpl implements AddressManager {
public Map<Integer, Address> map = new HashMap<Integer, Address>();
public Address get(Integer id) {
Address a = null;
if (map != null && !map.isEmpty()) {
a = map.get(id);
}
return a;
}
public List<Address> list() {
List<Address> list = null;
if (map != null && !map.isEmpty()) {
list = new ArrayList<Address>(map.size());
Iterator<Integer> itkey = map.keySet().iterator();
for (; itkey.hasNext();) {
Integer id = itkey.next();
list.add(map.get(id));
}
}
return list;
}
public void create(Address address) {
Date d = new Date();
address.setId((new Long(d.getTime()).intValue()));
map.put(address.getId(), address);
}
public void update(Address address) {
if (map != null && !map.isEmpty()) {
if (map.containsKey(address.getId())) {
map.put(address.getId(), address);
}
}
}
public void delete(Integer id) {
if (map != null && !map.isEmpty()) {
if (map.containsKey(id)) {
map.remove(id);
}
}
}
}
这些方法都没有什么特别,和平时的MANAGER一致。POJO
package com.sillycat.easyportlet.model;
import java.io.Serializable;
public class Address implements Serializable {
private static final long serialVersionUID = 5306372860419718840L;
private Integer id;
private String name;
private String address;
private String telphone;
private String mobile;
private String email;
...getter 和setter
}
页面撰写,调用不同的模式,实现编辑模式的CRUD,VIEW模式的LIST和VIEW
首先引入WEB-INF/portlets/easyportlet/taglibs.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<%@ taglib prefix="portlet" uri="http://java.sun.com/portlet" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
新增页面addressAdd.jsp
<%@ include file="taglibs.jsp" %>
<h1>Add Address</h1>
<portlet:actionURL var="formAction" portletMode="edit">
<portlet:param name="action" value="save"/>
</portlet:actionURL>
<form:form modelAttribute="address" method="post" action="${formAction}">
<form:errors path="*" cssStyle="color:red"/>
<form:hidden path="id" />
<table>
<tr>
<td>名字: </td>
<td><form:input path="name" size="20" maxlength="20" /></td>
</tr>
<tr>
<td>地址: </td>
<td><form:input path="address" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>座机: </td>
<td><form:input path="telphone" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>手机: </td>
<td><form:input path="mobile" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>邮箱: </td>
<td><form:input path="email" size="20" maxlength="255"/></td>
</tr>
</table>
<button type="submit">提交</button>
</form:form>
编辑页面addressEdit.jsp
<%@ include file="taglibs.jsp" %>
<h1>Add Address</h1>
<portlet:actionURL var="formAction" portletMode="edit">
<portlet:param name="action" value="save"/>
</portlet:actionURL>
<form:form modelAttribute="address" method="post" action="${formAction}">
<form:errors path="*" cssStyle="color:red"/>
<form:hidden path="id" />
<table>
<tr>
<td>名字: </td>
<td><form:input path="name" size="20" maxlength="20" /></td>
</tr>
<tr>
<td>地址: </td>
<td><form:input path="address" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>座机: </td>
<td><form:input path="telphone" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>手机: </td>
<td><form:input path="mobile" size="20" maxlength="255"/></td>
</tr>
<tr>
<td>邮箱: </td>
<td><form:input path="email" size="20" maxlength="255"/></td>
</tr>
</table>
<button type="submit">提交</button>
</form:form>
EDIT模式的列表页面addressList.jsp
<%@ include file="taglibs.jsp" %>
<h1>Address</h1>
<form method="post" action="<portlet:actionURL/>">
<c:forEach items="${addresses}" var="item">
<c:out value="${item.id}"/>
<c:out value="${item.name}" />
<c:out value="${item.address}" />
<c:out value="${item.telphone}" />
<c:out value="${item.mobile}" />
<c:out value="${item.email}" />
<a href="<portlet:actionURL portletMode="edit">
<portlet:param name="action" value="delete"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:actionURL>">
删除</a> |
<a href="<portlet:renderURL portletMode="edit">
<portlet:param name="action" value="edit"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:renderURL>">
编辑</a>
<br/>
</c:forEach>
<br/>
</form>
<br/>
<a href="<portlet:renderURL portletMode="edit">
<portlet:param name="action" value="add"/>
</portlet:renderURL>">
新增</a>
| 返回
<a href="<portlet:renderURL portletMode="view"/>">
查看模式
</a>
VIEW模式的列表页面addressListView.jsp
<%@ include file="taglibs.jsp" %>
<h1>Address</h1>
<form method="post" action="<portlet:actionURL/>">
<c:choose>
<c:when test="${empty addresses}">
<p>
当前没有地址记录
</p>
</c:when>
<c:otherwise>
<c:forEach items="${addresses}" var="item">
<c:out value="${item.id}"/>
<c:out value="${item.name}" />
<c:out value="${item.address}" />
<c:out value="${item.telphone}" />
<c:out value="${item.mobile}" />
<c:out value="${item.email}" />
<a href="<portlet:renderURL portletMode="view">
<portlet:param name="action" value="view"/>
<portlet:param name="id">
<jsp:attribute name="value">
<c:out value="${item.id}"/>
</jsp:attribute>
</portlet:param>
</portlet:renderURL>">
查看</a>
<br />
</c:forEach>
<br/>
</c:otherwise>
</c:choose>
</form>
<br/>
<a href="<portlet:renderURL portletMode="edit"/>">
编辑模式
</a>
VIEW模式的查看页面addressView.jsp
<%@ include file="taglibs.jsp"%>
<h1>Add Address</h1>
<table>
<tr>
<td>序号:</td>
<td><c:out value="${address.id}" /></td>
</tr>
<tr>
<td>名字:</td>
<td><c:out value="${address.name}" /></td>
</tr>
<tr>
<td>地址:</td>
<td><c:out value="${address.address}" /></td>
</tr>
<tr>
<td>座机:</td>
<td><c:out value="${address.telphone}" /></td>
</tr>
<tr>
<td>手机:</td>
<td><c:out value="${address.mobile}" /></td>
</tr>
<tr>
<td>邮箱:</td>
<td><c:out value="${address.email}" /></td>
</tr>
</table>
<a href="<portlet:renderURL portletMode="view"/>">
返回
</a>
另外几个jsp,比如error.jsp,unaailable.jsp是在出现异常的时候调用的。