css
在该实例中,经过构建一个添加学生信息项目,来综合应用Struts 2的知识点,包括标签、Struts 2配置等。首先来看看添加学生信息的界面,如图3.19所示。
html
图3.19 添加学生信息界面java
首先创建数据库XSCJ,创建学生表XSB。node
项目名 | 列名 | 数据类型 | 是否可空 | 默认值 | 说明 |
学号 | XH | char(6) | 主键 | ||
姓名 | XM | char(8) | |||
性别 | XB | bit | |||
出生时间 | CSSJ | datetime | 是 | ||
专业 | ZY | char(20) | |||
备注 | BZ | varchar(500) | 是 |
打开MyEclipse,创建一个Web项目,命名为“Example_Struts”。web
该步骤与3.2.1节中的第3步步骤相同,这里再也不赘述。ajax
其内容见3.2.1节第4步。sql
在项目的WebRoot文件夹下创建stu.jsp文件,代码。数据库
<%@ page language="java" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <s:head /> </head> <body > <h3>添加学生信息</h3> <s:form action="save.action" method="post" theme="simple"> <table> <tr> <td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td> </tr> <tr> <td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td> </tr> <tr> <td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',2:'女'}" value="1"></s:radio></td> </tr> <tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td> </tr> <tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj" displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> </tr> <tr> <td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td> </tr> <tr> <td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td> </tr> </table> </s:form> </body> </html>
Struts2的标签有自动排版功能。若是想本身排版,form标签中加入theme="simple",但加入该元素后,标签中的label属性就没用了。apache
备注:若是是比较新的版本(好比我用的2.2.1版本),会报错“No tag "datetimepicker" defined in tag library imported with prefix "s"”。浏览器
缘由:新版本中把struts2.0中的和ajax相关的,如datetimepicker,tree,treenode 都移动到了dojo中了
解决方式:
一、在jsp文件中加入<%@ taglib uri="/struts-dojo-tags" prefix="sx"%>和<sx:head/>
二、改成<sx:datetimepicker></sx:datetimepicker>
三、struts2-dojo-plugin-2.2.1.jar拷贝到/WEB-INF/lib下
四、在struts.xml增长配置
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/struts/*</url-pattern> </filter-mapping>
备注:
还可能遇到datetimepicker的乱码问题,显示的时候月份从一月到八月均可以正常显示,而到九月,十月就乱码。
解决方式一(这种方式会致使没有显示中文的“月”)
在 <sd:head />中加入:extraLocales="UTF-8"
在 <sd:datetimepicker .../>中加入:language="UTF-8"
解决方式二(推荐)
从新修改struts源码中的 dojo_zh.js和dojo_zh-cn.js文件(文件位置在: struts2-dojo-plugin-2.1.6.jar\org.apache.struts2\static\dojo\nls\下),把文件中乱码部分修改为正确的中文。
附:修改后的文件《3.7 Struts2综合应用实例的附件》
在src文件夹下新建包“org.model”,在该包下建class文件,命名为“Xsb”,该类中有6个字段,分别为xh、xm、xb、zy、cssj和bz,并生成它们的getter和setter方法,代码以下:
package org.model; import java.sql.Date; public class Xsb { private String xh; private String xm; private byte xb; private String zy; private Date cssj; private String bz; // 生成它们的getter和setter方法 public String getXh() { return xh; } public void setXh(String xh) { this.xh = xh; } public String getXm() { return xm; } public void setXm(String xm) { this.xm = xm; } public byte getXb() { return xb; } public void setXb(byte xb) { this.xb = xb; } public String getZy() { return zy; } public void setZy(String zy) { this.zy = zy; } public Date getCssj() { return cssj; } public void setCssj(Date cssj) { this.cssj = cssj; } public String getBz() { return bz; } public void setBz(String bz) { this.bz = bz; } }
注意,cssj为java.sql.Date类型。
在src文件夹下创建包org.work,在该包下创建class文件,命名为“DBConn”,该类负责和数据库链接,代码。
package org.work; import java.sql.*; import org.model.Xsb; public class DBConn { Connection conn; PreparedStatement pstmt; public DBConn(){ try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +"databaseName=XSCJ","sa","sa"); }catch(Exception e){ e.printStackTrace(); } } // 添加学生 public boolean save(Xsb xs){ try{ pstmt=conn.prepareStatement("insert into XSB (XH,XM,XB,ZY,CSSJ,BZ) values(?,?,?,?,?,?)"); pstmt.setString(1, xs.getXh()); pstmt.setString(2, xs.getXm()); pstmt.setByte(3, xs.getXb()); pstmt.setString(4, xs.getZy()); pstmt.setDate(5, xs.getCssj()); pstmt.setString(6, xs.getBz());//注意顺序 pstmt.executeUpdate(); return true; }catch(Exception e){ e.printStackTrace(); return false; } } }
补充:
使用sql语句:exec sys.sp_readerrorlog 0, 1, 'listening'能够查看sql server 2008 r2 的监听端口
SaveAction.java代码。
package org.action; import org.model.Xsb; import org.work.DBConn; import com.opensymphony.xwork2.ActionSupport; public class SaveAction extends ActionSupport{ private Xsb xs; public Xsb getXs() { return xs; } public void setXs(Xsb xs) { this.xs=xs; } public String execute() throws Exception { DBConn db=new DBConn(); Xsb stu=new Xsb(); stu.setXh(xs.getXh()); stu.setXm(xs.getXm()); stu.setXb(xs.getXb()); stu.setZy(xs.getZy()); stu.setCssj(xs.getCssj()); stu.setBz(xs.getBz()); if(db.save(stu)){ return SUCCESS; }else return ERROR; } }
在src文件夹下创建该文件,代码以下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <package name="default" extends="struts-default"> <action name="save" class="org.action.SaveAction"> <result name="success">/success.jsp</result> <result name="error">/stu.jsp</result> </action> </package> </struts>
在WebRoot文件夹下建立success.jsp文件,代码以下:
<%@ page language="java" pageEncoding="utf-8"%> <html> <head> </head> <body> 恭喜你,添加成功! </body> </html>
部署后,启动Tomcat,在浏览器中输入“http://localhsot:8080/Example_Struts/stu.jsp”,输入要添加的学生信息后,单击【添加】按钮,若是添加成功就会跳转到success.jsp页面。