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">
                    <a href="user.do?method=edit&id=${user.id}">Edit</a>
                </ec:column>
                <ec:column property="null" title="Remove" width="40" sortable="false" viewsAllowed="html">
                    <a 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新加入的泛型技术的运用更是如虎添翼。那么对于配置文件部分,我个人感觉比以前好像更加复杂了呢,也许是还不习惯吧。。。

SpringSide示例之HelloWorld相关推荐

  1. Arduino与ROS通讯的示例代码HelloWorld改写成夏普红外测距传感器数据传输的代码

    改写详情: 其实就是在原来的代码的基础上加了个红外测距传感器的代码,然后把红外测距传感器的double类型的数据用dtostrf函数转换成了char类型的字符串数组.并没有对消息类型进行任何的更改,仅 ...

  2. springside showcase mysql_搭建SpringSide示例showcase的eclipse运行环境

    我自己经常用的IDE是eclipse,闲来想深入研究下Spring,于是尝试下载一个SpringSide学习. 1.下载SpringSide的源代码,我下载的是4.1.0.GA,下载到的压缩包:spr ...

  3. Cesium环境搭建成功和初步看一下它的示例

    Cesium是一款开源的基于JavaScript的3D地图框架. 官网描述: CesiumJS is a geospatial 3D mapping platform for creating vir ...

  4. xml配置javaBean的IOC实现示例

    xml配置javaBean的IOC实现 1.开发步骤介绍 创建java项目(项目可以是Maven项目), 加入spring相关架包, 创建javaBean 使用xml配置javaBean 管理/使用J ...

  5. BDW01手把手系列01:BDW01开发板基于TencentOS Tiny之helloworld!

    Hello world BDW01是一个接口资源十分丰富的物联网开发板. 本文先介绍开发板资源,然后是开发环境安装,环境搭建,最后在串口上输出创建的两个任务打印. 一.开发板BDW01入门介绍 1. ...

  6. php 英文小写变大写,PHP英文字母大小写转换函数

    例1,每个单词的首字母转换为大写:ucwords() 复制代码 代码示例: $foo = 'hello world!'; $foo = ucwords($foo);             // He ...

  7. 《Java从小白到大牛》之第14章 异常处理(上)

    <Java从小白到大牛>纸质版已经上架了!!! 很多事件并非总是按照人们自己设计意愿顺利发展的,而是有能够出现这样那样的异常情况.例如:你计划周末郊游,你的计划会安排满满的,你计划可能是这 ...

  8. Spark记录-Scala基础语法

    如果您熟悉Java语言语法和编程,那么学习Scala将会很容易.Scala和Java之间最大的句法差异在于行结束字符的分号(;) 是可选的. 当编写Scala程序时,它可以被定义为通过调用彼此的方法进 ...

  9. 深入Java中文编码乱码问题及最优解决方法

    说明:原创作者联系地址为:josserchai@yahoo.com . 由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈 ...

最新文章

  1. python绘制立体玫瑰花-Python 玫瑰花绘制
  2. 当Tomcat遇上Netty,我这一系列神操作,同事看了拍手叫绝
  3. web安全_暴力破解
  4. 斐波那契回调线怎么画_外汇MT4平台上的斐波那契回调线怎么使用
  5. oracl的使用命令
  6. 微服务实践 | 网易考拉海购Dubbok框架优化详解
  7. Windows Server 2008 使用蓝牙的问题
  8. php utf8 gbk 数组 互转
  9. Kali Linux镜像安装(1)
  10. python二次开发ug_CAD二次开发(UG/Proe/其他) - 随笔分类 - 白途思 - 博客园
  11. windows查看系统补丁
  12. 【python常用小工具】python打印26个英文字母
  13. 微信闪退的修复方法分享
  14. 工程建设项目管理信息系统
  15. 在OpenCV里绘制直线、圆、中文等图形
  16. 【VBA研究】输出PDF文件合并时出错
  17. 智慧物联下主机加固安全解决方案分析
  18. 95后女孩从月入3000到月入10万
  19. 火狐浏览器和IE的CSS区别
  20. 基因数据处理5之GRCH38数据源和查看信息

热门文章

  1. c++中STL实现演讲比赛流程
  2. H.264中IDR帧和I帧区别
  3. 斐波那契数列求解+尾递归
  4. 关于memcpy和memmove两函数的区别
  5. C++ STL之Set
  6. 09-排序1 排序 (25 分)
  7. 这份1307页Android面试全套真题解析,源码+原理+手写框架
  8. oracle pl/sql 基础
  9. gym100825G. Tray Bien(轮廓线DP)
  10. LVS的四种模式的实现