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頁面。