SpringSide示例之HelloWorld


SpringSide是个什么东西呢?这么说吧,就是采众家之长的一个一站式框架,它吸取了开源界许多优秀组件的精华部分,非常简约的一个东西,具体就不多介绍了,自己可以参考官方文档。

下面来看看运用这个框架实现一个简单的用户管理究竟有多么容易。

先来看表现层:

新增或修改用户页面:


<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/commons/taglibs.jsp" %>
<html>
<head>
    
<%@ include file="/commons/meta.jsp" %>
    
<title>User Manage</title>
</head>

<body>
<div id="page">
    
<div id="header">
        
<h1>Helloworld Sample</h1>
    
</div>
    
<%@ include file="/commons/messages.jsp" %>
    
<div id="content">
        
<h1>User Infomation Manage</h1>
        
<html:form action="/user.do" focus="name" styleClass="form" onsubmit="return validateUserForm(this)">
            
<input type="hidden" name="method" value="save"/>
            
<html:hidden property="id"/>
            
<table>
                
<tr>
                    
<td><label>Name</label></td>
                    
<td>
                        
<html:text property="name" styleClass="text"/>
                        
<span class="req">*</span>
                        
<span class="fieldError"><html:errors property="name"/></span>
                    
</td>
                
</tr>
                
<tr>
                    
<td><label>EMail</label></td>
                    
<td>
                        
<html:text property="email" styleClass="text"/>
                    
</td>
                
</tr>
                
<tr>
                    
<td><label>Remark</label></td>
                    
<td>
                        
<html:textarea property="descn" rows="10" cols="40"/>
                    
</td>
                
</tr>
            
</table>
            
<div>
                
<html:submit property="saveBtn" styleClass="button">Save</html:submit>
                
<html:cancel styleClass="button">Cancel</html:cancel>
            
</div>
        
</html:form>
    
</div>
</div>
<html:javascript formName="userForm" staticJavascript="false" dynamicJavascript="true" cdata="false"/>
<script type="text/javascript" src="${ctx}/scripts/validator.jsp"></script>
<%@ include file="/commons/footer.jsp" %>
</body>
</html>


用户列表页面:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ include file="/commons/taglibs.jsp" %>
<html>
<head>
    
<%@ include file="/commons/meta.jsp" %>
    
<link href="${ctx}/widgets/extremecomponents/extremecomponents.css" type="text/css" rel="stylesheet">
    
<title>User Manage</title>
</head>

<body>
<div id="page">
    
<div id="header">
        
<h1>Helloworld Sample</h1>
    
</div>

    
<div id="content">
        
<h1>User List</h1>
        
<%@ include file="/commons/messages.jsp" %>
        
<ec:table items="users" var="user"
                  action
="${ctx}/user.do">
            
<ec:exportXls fileName="UserList.xls" tooltip="Export Excel"/>
            
<ec:row>
                
<ec:column property="rowcount" cell="rowCount" sortable="false" title="No." width="60"/>
                
<ec:column property="id" title="ID" width="60"/>
                
<ec:column property="name" title="Name" width="120"/>
                
<ec:column property="email" title="Email" width="120"/>
                
<ec:column property="descn" title="Description" viewsDenied="html"/>
                
<ec:column property="null" title="Edit" width="40" sortable="false" viewsAllowed="html">
                    
<href="user.do?method=edit&id=${user.id}">Edit</a>
                
</ec:column>
                
<ec:column property="null" title="Remove" width="40" sortable="false" viewsAllowed="html">
                    
<href="user.do?method=delete&id=${user.id}">Delete</a>
                
</ec:column>
            
</ec:row>
        
</ec:table>
    
</div>

    
<div>
        
<button id="addbtn" onclick="location.href='user.do?method=create'">Add</button>
    
</div>
</div>
<%@ include file="/commons/footer.jsp" %>
</body>
</html>

对应的控制器类UserAction.java:


package org.springside.helloworld.web;

import org.springside.core.web.StrutsEntityAction;
import org.springside.helloworld.model.User;
import org.springside.helloworld.service.UserManager;

/** *//**
 * 用户管理Controller.
 * <p/>
 * 继承于StrutsEntityAction,不需编码就拥有默认的对User对象的CRUD响应函数. 如果想了解不继承于EntityAction,自行编写CRUD的写法, 参考{
@link UserActionNativeVersion}.
 *
 * 
@author calvin
 * 
@see org.springside.core.web.StrutsEntityAction
 * 
@see org.springside.core.web.StrutsAction
 * 
@see UserActionNativeVersion
 
*/

public class UserAction extends StrutsEntityAction<User, UserManager> {

    @SuppressWarnings(
"unused")
    
private UserManager userManager;

    
public void setUserManager(UserManager userManager) {
        
this.userManager = userManager;
    }

}


然后是业务逻辑层,

package org.springside.helloworld.service;

import org.springside.core.dao.HibernateEntityDao;
import org.springside.helloworld.model.User;

/** *//**
 * 用户管理业务类.
 * <p/>
 * 继承于HibernateEntityDao,不需任何代码即拥有默认的对User对象的CRUD函数. 如果想了解不继承于EntityDao,自行编写CRUD的写法, 参考{
@link UserManagerNativeVersion}.
 *
 * 
@author calvin
 * 
@see HibernateEntityDao
 * 
@see org.springside.core.dao.HibernateGenericDao
 * 
@see UserManagerNativeVersion
 
*/

public class UserManager extends HibernateEntityDao<User> {
    
// .CRUD以外的其它商业方法
}

然后是模型层


package org.springside.helloworld.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/** *//**
 * 用户.带jpa annotation简版配置.
 *
 * 
@author calvin
 * 
@author schweigen
 
*/

 
//同USERS表映射
@Entity
@Table(name 
= "USERS")
public class User 
{
    
private Integer id;//用户id 

    
private String name;//用户名

    
private String email;//e-mail

    
private String descn;//自我介绍

    
//主键自动生成,其他,其余属性全部与数据库中的列默认映射。
    @Id
    @GeneratedValue(strategy 
= GenerationType.AUTO)
    
public Integer getId() {
        
return id;
    }


    
public void setId(Integer id) {
        
this.id = id;
    }


    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


    
public String getEmail() {
        
return email;
    }


    
public void setEmail(String email) {
        
this.email = email;
    }


    
public String getDescn() {
        
return descn;
    }


    
public void setDescn(String descn) {
        
this.descn = descn;
    }

}



那么代码部分就这些了,可以看到不需要我们自己去写重复的CRUD代码,仅仅从一些特定的基类继承下来就可以了,而Jdk新加入的泛型技术的运用更是如虎添翼。那么对于配置文件部分,我个人感觉比以前好像更加复杂了呢,也许是还不习惯吧。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS之viewports剖析

1.设备的pixels和CSS的pixels 首先你应当理解CSS的pixels&#xff0c;以及它和设备的pixels的区别 我们姑且认定设备的pixels为标准的pixels宽度。这些pixels决定了你工作所用的那些设备上正式的分辨率。在大多数情况下&#xff0c;能够从screen.width/height上取出具体值 如…

9个好用的搜索小技巧

百度一下&#xff0c;你就知道。搜索是我们常用的工具&#xff0c;怎么又快又准的搜索出想要的结果是现代人必备的技能&#xff0c;下面就教你9个好用的搜索小技巧吧 1 . 完全匹配搜索。 在查询词的外边加上双引号“”。 如 “北京地坛” &#xff0c;注意引号是不分中英文的…

javascript学习系列(11):数组中的findIndex方法

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 1前言 在我们的日常开发中 不免会有很多需要处理数据的方法 本节主要说一说f…

CSS之基于视窗单位的排版

1.使用视窗单位进行排版 这里还有一个为什么要考虑使用视窗单位进行排版的原因 - 根据客户端的浏览器&#xff0c;视窗单位会自动重新计算。这就意味着我们不需要显式声明媒体查询的字体大小 实例1&#xff1a;让我们用一个例子清楚地说明这一点 考虑下面的代码&#xff0c;…

React开发(111):写注释的方法

放上去会显示(method) Template.getDictionary(): void

数据库范式(1NF 2NF 3NF BCNF)详解

数据库的设计范式是数据库设计所需要满足的规范&#xff0c;满足这些规范的数据库是简洁的、结构明晰的&#xff0c;同时&#xff0c;不会发生插入&#xff08;insert&#xff09;、删除&#xff08;delete&#xff09;和更新&#xff08;update&#xff09;操作异常。反之则是…

再学 GDI+[98]: TGPImage(18) - 获取 GDI+ 图像格式对应的 GUID

和在 Net 中不同的是, 在具体指定图像格式时, 这里常常需要的不是格式名称, 而是格式的 GUID;知道了格式名称, 用 GetEncoderClsid 函数可以获取格式的 GUID;GetEncoderClsid 函数来自 GDIPUTIL 单元, 本例并没有用到前面一直不可或缺的 GDIPOBJ、GDIPAPI 单元.如果要获取 imag…

JS之连接数组方法concat

作用&#xff1a;用于连接两个或多个数组&#xff0c;该方法不会改变现有的数组&#xff0c;而仅仅会返回被连接数组的一个副本 语法&#xff1a;arrayObject.concat(arrayX,arrayX,……,arrayX) 参数&#xff1a;arrayX&#xff0c;必需。该参数可以是具体的值&#xff0c;也…

微信小程序:生命周期

下面从三个方面来介绍小程序的生命周期&#xff1a; &#xff08;1&#xff09;应用生命周期 &#xff08;2&#xff09;页面生命周期 &#xff08;3&#xff09;应用及页面生命周期的触发顺序 1.应用生命周期 App() 必须在 app.js 中调用&#xff0c;必须调用且只能调用一次…

在.NET3.5平台上使用LinQ to SQL + NBear 创建三层WEB应用

看了《一步一步学Linq to sql》和《在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统》 这两个系列文章后,因为一直使用NBear,所以试着综合了一下主要用NBear.IOC其它的NBear.data里的就没有会了,相应的使用LINQ来做数据处理. 之前一直使用NBear做些WEB应用主要感觉N…

JS之字符串连接方法join

作用&#xff1a;join() 方法用于把数组中的所有元素放入一个字符串&#xff0c;元素是通过指定的分隔符进行分隔的。&#xff08;作用和split正好相反&#xff09; 语法&#xff1a;arrayObject.join(separator) 参数&#xff1a;可选。指定要使用的分隔符。如果省略该参数&…

JS之颠倒数组元素的reverse方法

作用&#xff1a;reverse() 方法用于颠倒数组中元素的顺序 语法&#xff1a;arrayObject.reverse() 注意&#xff1a;该方法会改变原来的数组&#xff0c;而不会创建新的数组 实例1&#xff1a;

图文:详解数据库Oracle 11g的基本安装

From: http://blog.csdn.net/wjcreator123/article/details/3243041 下面提供的是Oracle 11g的下载地址和基本安装过程&#xff08;仅作参考&#xff09; 第一步&#xff1a; oracle服务端下载: http://down.zdnet.com.cn/detail/9/82225.shtml 客户端: http://blog.csdn.net…

mysql数据库中查看当前使用的数据库是哪个数据库?

一、用select database()语句 语句 mysql > select database();结果 解释&#xff1a;表示的是当前使用的是哪个数据库或者说会话登录到了哪个数据库中。 二、用show tables语句 语句 mysql > show tables;结果 解释&#xff1a;查询出来的结果中&#xff0c;第一行…

JS之返回数组指定元素的slice

作用&#xff1a;slice() 方法可从已有的数组中返回选定的元素 语法&#xff1a;arrayObject.slice(start,end) 参数1&#xff1a;必需。规定从何处开始选取。如果是负数&#xff0c;那么它规定从数组尾部开始算起的位置。也就是说&#xff0c;-1 指最后一个元素&#xff0c;…

使用 ADO.NET 的 NextResult 方法取得多个 Result Set

(本帖在版工的旧 Blog 中&#xff0c;发表日期为 2007/04/06) (本帖有些 Hyperlink 是连到台湾的网站&#xff0c;若无法连结&#xff0c;麻烦请留言反应)从 ADO.NET 1.x 开始&#xff0c;DataReader 就可以在单一次的查询动作中&#xff0c;「批次 (batch)」读取 T-SQL 语句以…