開發環境:
IDE:MyEclipse6.6GA
Web Server:Tomcat 6.0.20
Database:MySql 5.1.36
MVC:Struts2.1.8
FrameWork:Spring2.0,Hibernate3.2
Client UI:Ext2.3.0
一、建立可編輯之Ext Grid及JSON output頁面:
1.Ext Grid頁面(editGrid2.jsp):
2.JSON output頁面(outputJSON.jsp):
二、建立刪除資料DAO及Service及Struts2 Action:
0.建立bean (Movies.java):
1.建立刪除資料DAO Interface(SysMgrDAO.java):
2.建立刪除資料DAO Implement(SysMgrDAOImpl.java):
3.建立刪除資料Service Interface(SysMgrService.java):
4.建立刪除資料Service Implement(SysMgrDAO.java):
5.建立刪除資料Struts2 Action:
5.1.SysMgrAction.java
5.2.struts2 config(struts.xml):
5.3.spring config(applicationContext.xml):
三、測試結果:
1.http://localhost:8080/ExtStudy/Basic/editGrid2.jsp





IDE:MyEclipse6.6GA
Web Server:Tomcat 6.0.20
Database:MySql 5.1.36
MVC:Struts2.1.8
FrameWork:Spring2.0,Hibernate3.2
Client UI:Ext2.3.0
一、建立可編輯之Ext Grid及JSON output頁面:
1.Ext Grid頁面(editGrid2.jsp):
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'combox.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
<link rel="stylesheet" type="text/css" href="css/onReady.css">
<script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="extjs/ext-all.js"></script>
<script type="text/javascript" src="extjs/ext-lang-zh_TW.js"></script>
<script type="text/javascript"><!--
Ext.onReady(function(){
var store = new Ext.data.Store({
url: 'SysMgrJson!getMovies.action',
reader: new Ext.data.JsonReader({root:'results',totalProperty:'totals'}, [
'id',
'coverthumb',
'title',
'director',
{name: 'released', type: 'date', dateFormat: 'Y-m-d'},
'genre',
'tagline',
{name: 'price', type: 'float'},
{name: 'active'}
])
});
var genres = new Ext.data.Store({
data: [
[1,"Comedy"],
[2,"Drama"],
[3,"Action"],
[4,"Mystery"]
],
reader: new Ext.data.ArrayReader({id:'id'}, [
'id',
'genre'])
});
//Combining two columns function
function title_tagline(val, x, store){
return '<b>'+val+'</b><br>'+store.data.tagline;
}
//Generating HTML and graphics
function cover_image(val){
return '<img src="images/'+val+'.jpg" width="50%" height="50%">';
}
//for edit field of grid
var title_edit = new Ext.form.TextField();
var director_edit = new Ext.form.TextField();
var tagline_edit = new Ext.form.TextField({
maxLength: 45
});
var price_edit = new Ext.form.TextField();
var coverthumb_edit = new Ext.form.TextField();
var released_edit = new Ext.form.DateField();
var genre_edit = new Ext.form.ComboBox({
typeAhead: true,
triggerAction: 'all',
mode: 'local',
store: genres,
displayField:'genre',
valueField: 'genre'
});
//for add row to grid
var ds_model = Ext.data.Record.create([
'id',
'title',
'director',
{name: 'released', type: 'date', dateFormat: 'Y-m-d'},
'genre',
'tagline',
'coverthumb',
{name: 'price', type: 'float'},
{name: 'active'}
]);
// add your data store here
var grid = new Ext.grid.EditorGridPanel({
//renderTo: document.body,
renderTo:'example-grid',
frame:true,
title: 'Movie Database',
height:300,
width:550,
stripeRows:true,
store: store,
//增加grid event for Row Selection mode
sm: new Ext.grid.RowSelectionModel({
//singleSelect: true,
listeners: {
rowselect: {
fn: function(sm,index,record) {
index++;
Ext.Msg.alert('提示','您選擇了,'+record.data.title+',第 '+index+'筆資料');
}
}
}
}),
//Altering the grid at the click of a button
tbar: [
//modify title column of grid
{
text: '修改 Title',
handler: function(){
var sm = grid.getSelectionModel();
if (sm.hasSelection()){
var sel = sm.getSelected();
Ext.Msg.show({
title: '修改 Title',
prompt: true,
buttons: Ext.MessageBox.OKCANCEL,
value: sel.data.title,
fn: function(btn,text){
if (btn == 'ok'){
sel.set('title', text);
}
}
});
}else{
Ext.Msg.alert('提示','請選擇欲修改Title之列');
}
}
},
//hidden price column of grid
{
text: 'Hide Price',
handler: function(btn){
var cm = grid.getColumnModel();
var pi = cm.getIndexById('price');
//var pi=5;
if (cm.isHidden(pi)){
cm.setHidden(pi,false);
btn.setText('Hide Price');
}else{
cm.setHidden(pi,true);
btn.setText('Show Price');
}
btn.render();
}
},
//add first row to grid
{
text: 'Add Movie(First)',
icon: 'images/RowInsert.png',
cls: 'x-btn-text-icon',
handler: function() {
grid.getStore().insert(0,new ds_model({
id:'',
title:'New Movie',
director:'',
genre:'Comedy',
tagline:'',
active:'1'
})
);
grid.startEditing(0,0);
}
},
//add last row to grid
{
text: 'Add Movie(Last)',
icon: 'images/RowInsert.png',
cls: 'x-btn-text-icon',
handler: function() {
grid.getStore().insert(grid.getStore().getCount(),new ds_model({
id:'',
title:'New Movie',
director:'',
genre:'Comedy',
tagline:'',
active:'1'
})
);
grid.startEditing(grid.getStore().getCount()-1,0);
}
},
//Deleting data from the server
{
text: 'Remove Movie',
icon: 'images/RowDelete.png',
cls: 'x-btn-text-icon',
handler: function() {
var sm = grid.getSelectionModel();
if (sm.hasSelection()){
//var sel = sm.getSelected();
var sels = sm.getSelections();
var len = sels.length;
var ids = new Array(len);
for(var i=0;i<len;i++){
ids[i] = sels[i].data.id;
if(i==0){
var msgs = '刪除: '+sels[i].data.title;
}else{
msgs = msgs +',\n'+sels[i].data.title;
}
};
Ext.Msg.show({
title: '刪除電影',
buttons: Ext.MessageBox.YESNOCANCEL,
msg: msgs,
fn: function(btn){
if (btn == 'yes'){
var conn = new Ext.data.Connection();
conn.request({
url: 'SysMgrJson!updateMovies.action',
method:'post',
params: {
action: 'delete',
id: ids
},
success: function(resp,opt) {
//grid.getStore().remove(sel);
grid.getStore().reload();
},
failure: function(resp,opt) {
Ext.Msg.alert('Error',
'Unable to delete movie');
}
});
}
}
});
}else{
Ext.Msg.alert('提示','請選擇欲刪除(多)列之資料');
}
}
},
//Saving data to the server
{
text: 'Save Movie',
icon: 'images/save-icon.png',
cls: 'x-btn-text-icon',
handler: function() {
var sm = grid.getSelectionModel();
if (sm.hasSelection()){
var sels = sm.getSelections();
var len = sels.length;
var values = new Array(len);
for(var i=0;i<len;i++){
values[i] = new Array(9);
values[i][0] = sels[i].data.id;
values[i][1] = sels[i].data.title;
values[i][2] = sels[i].data.director;
values[i][3] = (sels[i].data.released).format('Y-m-d');
values[i][4] = sels[i].data.genre;
values[i][5] = sels[i].data.tagline;
values[i][6] = sels[i].data.coverthumb;
values[i][7] = sels[i].data.price;
values[i][8] = sels[i].data.active;
if(i==0){
var msgs = '儲存: '+sels[i].data.title;
}else{
msgs = msgs +',\n'+sels[i].data.title;
}
};
Ext.Msg.show({
title: '儲存電影',
buttons: Ext.MessageBox.YESNOCANCEL,
msg: msgs,
fn: function(btn){
if (btn == 'yes'){
var conn = new Ext.data.Connection();
conn.request({
url: 'SysMgrJson!updateMovies.action',
method:'post',
params: {
action: 'update',
values: values
},
success: function(resp,opt) {
//grid.getStore().remove(sel);
grid.getStore().reload();
},
failure: function(resp,opt) {
Ext.Msg.alert('Error',
'Unable to save movie');
}
});
}
}
});
}else{
Ext.Msg.alert('提示','請選擇欲儲存(多)列之資料');
}
}
}
],
bbar: new Ext.PagingToolbar({
pageSize: 5,
store: store,
displayInfo: true,
displayMsg: '第 {0} 筆 - {1} 筆 of {2} 筆',
emptyMsg: "沒有資料"
}),
//Defining a Grids column model and want to display column
columns: [
{header: "Cover", dataIndex: 'coverthumb',renderer:cover_image},
{header: "CoverThumb", dataIndex: 'coverthumb',editor:coverthumb_edit},
//Combining two columns
{header: "Title", dataIndex: 'title',renderer:title_tagline,editor:title_edit},
{header: "Director", dataIndex: 'director',editor:director_edit},
//Client-side sorting
{header: "Released", dataIndex: 'released',sortable:true,
renderer: Ext.util.Format.dateRenderer('m/d/Y'),editor:released_edit},
{header: "Genre", dataIndex: 'genre',editor:genre_edit},
{header: "Price",dataIndex: 'price',id:'price',editor:price_edit},
//setup hidden column
{header: "Tagline", dataIndex: 'tagline',hidden:true,editor:tagline_edit}
]
});
//需在gridPanel建立後才可以Load資料
store.load({params:{start:0, limit:5}});
});
//
--></script>
</head>
<body><br>
<center>
<h3><font color="red">Movie Database Grid</font></h3><br>
</center>
<table align="center" border="0">
<tr>
<td>
<div id="example-grid"></div>
<td>
</tr>
</table>
</body>
</html>
2.JSON output頁面(outputJSON.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <s:property value="jsonString" escape="false"/>
二、建立刪除資料DAO及Service及Struts2 Action:
0.建立bean (Movies.java):
package com.bean.test;
public class Movies {
private int id;
private String title;
private String director;
private String released;
private String genre;
private String tagline;
private String coverthumb;
private String price;
private String active;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDirector() {
return director;
}
public void setDirector(String director) {
this.director = director;
}
public String getReleased() {
return released;
}
public void setReleased(String released) {
this.released = released;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getTagline() {
return tagline;
}
public void setTagline(String tagline) {
this.tagline = tagline;
}
public String getCoverthumb() {
return coverthumb;
}
public void setCoverthumb(String coverthumb) {
this.coverthumb = coverthumb;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getActive() {
return active;
}
public void setActive(String active) {
this.active = active;
}
}
1.建立刪除資料DAO Interface(SysMgrDAO.java):
package com.dao.test;
import java.util.List;
public interface SysMgrDAO {
public List findFunctionAll();
public List findFunctionAll(final int start,final int limit);
public int getFunctionTotalCount();
public List findTitleAll();
public List findTitleAll(final int start,final int limit);
public int getTitleTotalCount();
public List findMovieAll(final int start,final int limit);
public int getMoviesTotalCount();
public String deleteMovie(int[] id);
public String updateMovie(String[][] values);
}
2.建立刪除資料DAO Implement(SysMgrDAOImpl.java):
package com.dao.impl.test;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.transform.Transformers;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.bean.test.Function;
import com.bean.test.Movies;
import com.bean.test.Title;
import com.dao.test.SysMgrDAO;
public class SysMgrDAOImpl extends HibernateDaoSupport implements SysMgrDAO {
private static final Log log = LogFactory.getLog(SysMgrDAOImpl.class);
public List findFunctionAll() {
log.debug("finding tbl_function with native sql");
Session session = this.getSession();
try{
String sql="select id as fnid,name as fnname,`desc` as fndesc from cmsdb.tbl_function";
List list = session.createSQLQuery(sql)
.addScalar("fnid")
.addScalar("fnname")
.addScalar("fndesc")
.setResultTransformer(Transformers.aliasToBean(Function.class))
.list();
log.debug("find successful of tbl_function with native sql");
return list;
}catch(RuntimeException re){
log.error("finded error of tbl_function with native sql",re);
throw re;
}finally{
session.close();
}
}
public List findFunctionAll(final int start,final int limit) {
log.debug("get paging of tbl_function with native sql");
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Object obj = session.createSQLQuery("select id as fnid,name fnname,`desc` as fndesc from cmsdb.tbl_function")
.addScalar("fnid")
.addScalar("fnname")
.addScalar("fndesc")
.setResultTransformer(Transformers.aliasToBean(Function.class))
.setFirstResult(start)
.setMaxResults(limit)
.list();
log.debug("get paging of tbl_function with native sql successful");
return obj;
}
});
}
public int getFunctionTotalCount() {
log.debug("finding totalcount of tbl_function with native sql");
Session session = this.getSession();
try{
String sql="select count(*) as count from cmsdb.tbl_function";
List list = session.createSQLQuery(sql)
.addScalar("count",Hibernate.INTEGER)
.list();
log.debug("find successful totalcount of tbl_function with native sql");
return ((Integer)list.get(0)).intValue();
}catch(RuntimeException re){
log.error("finded error totalcount of tbl_function with native sql",re);
throw re;
}finally{
session.close();
}
}
public List findTitleAll() {
log.debug("finding tbl_title with native sql");
Session session = this.getSession();
try{
String sql="select id,name,`desc` from cmsdb.tbl_title";
List list = session.createSQLQuery(sql)
.setResultTransformer(Transformers.aliasToBean(Title.class))
.list();
log.debug("find successful of tbl_title with native sql");
return list;
}catch(RuntimeException re){
log.error("finded error of tbl_title with native sql",re);
throw re;
}finally{
session.close();
}
}
public List findTitleAll(final int start, final int limit) {
log.debug("get paging of tbl_title with native sql");
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Object obj = session.createSQLQuery("select id as id,name as name,`desc` as `desc` from cmsdb.tbl_title")
.addScalar("id")
.addScalar("name")
.addScalar("desc")
.setResultTransformer(Transformers.aliasToBean(Title.class))
.setFirstResult(start)
.setMaxResults(limit)
.list();
log.debug("get paging of tbl_title with native sql successful");
return obj;
}
});
}
public int getTitleTotalCount() {
log.debug("finding totalcount of tbl_title with native sql");
Session session = this.getSession();
try{
String sql="select count(*) as count from cmsdb.tbl_title";
List list = session.createSQLQuery(sql)
.addScalar("count",Hibernate.INTEGER)
.list();
log.debug("find successful totalcount of tbl_title with native sql");
return ((Integer)list.get(0)).intValue();
}catch(RuntimeException re){
log.error("finded error totalcount of tbl_title with native sql",re);
throw re;
}finally{
session.close();
}
}
public List findMovieAll(final int start,final int limit) {
log.debug("get paging of tbl_movies with native sql");
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Object obj = session.createSQLQuery("select id,title,director,released,genre,tagline,coverthumb,price,active from cmsdb.tbl_movies")
.addScalar("id")
.addScalar("title")
.addScalar("director")
.addScalar("released",Hibernate.STRING)
.addScalar("genre")
.addScalar("tagline")
.addScalar("coverthumb")
.addScalar("price")
.addScalar("active")
.setResultTransformer(Transformers.aliasToBean(Movies.class))
.setFirstResult(start)
.setMaxResults(limit)
.list();
log.debug("get paging of tbl_movies with native sql successful");
return obj;
}
});
}
public int getMoviesTotalCount() {
log.debug("finding totalcount of tbl_movies with native sql");
Session session = this.getSession();
try{
String sql="select count(*) as count from cmsdb.tbl_movies";
List list = session.createSQLQuery(sql)
.addScalar("count",Hibernate.INTEGER)
.list();
log.debug("find successful totalcount of tbl_movies with native sql");
return ((Integer)list.get(0)).intValue();
}catch(RuntimeException re){
log.error("finded error totalcount of tbl_movies with native sql",re);
throw re;
}finally{
session.close();
}
}
public String deleteMovie(int[] id) {
log.debug("deleting movies of tbl_movies with native sql");
Session session = this.getSession();
Transaction tx = session.beginTransaction();
String sql;
String flag="success";
try{
sql = "delete from cmsdb.tbl_movies where id=?";
for(int i=0;i<id.length;i++){
session.createSQLQuery(sql).setParameter(0, Integer.valueOf(id[i])).executeUpdate();
tx.commit();
}
}catch(RuntimeException re){
flag="failure";
tx.rollback();
log.error("deleted error movies of tbl_movies with native sql",re);
throw re;
}finally{
session.close();
}
return flag;
}
public String updateMovie(String[][] values) {
Session session = this.getSession();
Transaction tx = null;
String sql;
String flag="success";
try{
for(int i=0;i<values.length;i++){
String[] value = values[i][0].split(",");
tx = session.beginTransaction();
if(value[0]!=null && value[0].equals("")){//values[i][0]==>id field value,when id='' then insert
log.debug("saving movies of tbl_movies with native sql");
sql = "insert into tbl_movies(title,director,released,genre,tagline,coverthumb,price,active)values(?,?,?,?,?,?,?,?)";
session.createSQLQuery(sql).setParameter(0, value[1])
.setParameter(1, value[2])
.setParameter(2, value[3])
.setParameter(3, value[4])
.setParameter(4, value[5])
.setParameter(5, value[6])
.setParameter(6, value[7])
.setParameter(7, value[8])
.executeUpdate();
tx.commit();
}else{//values[i][0]==>id field value,when id!='' then update
log.debug("updating movies of tbl_movies with native sql");
sql = "update tbl_movies set title=?" +
",director=?" +
",released=?" +
",genre=?" +
",tagline=?" +
",coverthumb=?" +
",price=?" +
",active=?" +
" where id=?";
session.createSQLQuery(sql).setParameter(0, value[1])
.setParameter(1, value[2])
.setParameter(2, value[3])
.setParameter(3, value[4])
.setParameter(4, value[5])
.setParameter(5, value[6])
.setParameter(6, value[7])
.setParameter(7, value[8])
.setParameter(8, Integer.valueOf(value[0]))
.executeUpdate();
tx.commit();
}
}
}catch(RuntimeException re){
flag="failure";
tx.rollback();
log.error("saved error movies of tbl_movies with native sql",re);
throw re;
}finally{
session.close();
}
return flag;
}
}
3.建立刪除資料Service Interface(SysMgrService.java):
package com.service.test;
import java.util.List;
public interface SysMgrService {
public List findFunctionAll();
public List findFunctionAll(final int start,final int limit);
public int getFunctionTotalCount();
public List findTitleAll();
public List findTitleAll(final int start,final int limit);
public int getTitleTotalCount();
public List findMovieAll(final int start,final int limit);
public int getMoviesTotalCount();
public String deleteMovie(int[] id);
public String updateMovie(String[][] values);
}
4.建立刪除資料Service Implement(SysMgrDAO.java):
package com.service.impl.test;
import java.util.List;
import com.dao.test.SysMgrDAO;
import com.service.test.SysMgrService;
public class SysMgrServiceImpl implements SysMgrService {
private SysMgrDAO sysMgrDAO;
public List findFunctionAll() {
return this.sysMgrDAO.findFunctionAll();
}
public List findFunctionAll(int start, int limit) {
return this.sysMgrDAO.findFunctionAll(start, limit);
}
public List findTitleAll() {
return this.sysMgrDAO.findTitleAll();
}
public List findTitleAll(int start, int limit) {
return this.sysMgrDAO.findTitleAll(start, limit);
}
public int getFunctionTotalCount() {
return this.sysMgrDAO.getFunctionTotalCount();
}
public int getTitleTotalCount() {
return this.sysMgrDAO.getTitleTotalCount();
}
public SysMgrDAO getSysMgrDAO() {
return sysMgrDAO;
}
public void setSysMgrDAO(SysMgrDAO sysMgrDAO) {
this.sysMgrDAO = sysMgrDAO;
}
public List findMovieAll(int start, int limit) {
return this.sysMgrDAO.findMovieAll(start, limit);
}
public int getMoviesTotalCount() {
return this.sysMgrDAO.getMoviesTotalCount();
}
public String deleteMovie(int[] id) {
return this.sysMgrDAO.deleteMovie(id);
}
public String updateMovie(String[][] values) {
return this.sysMgrDAO.updateMovie(values);
}
}
5.建立刪除資料Struts2 Action:
5.1.SysMgrAction.java
package com.action.test;
import java.util.List;
import net.sf.json.JSONArray;
import com.opensymphony.xwork2.ActionSupport;
import com.service.test.SysMgrService;
public class SysMgrAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private SysMgrService sysMgrService;
private String jsonString;
private int start;
private int limit;
private String function01;
private String grade01;
private int[] id;
private String action;
private String[][] values;
public String getFunction() throws Exception {
//沒有分頁功能
//List list = this.sysMgrService.findFunctionAll();
//有分頁功能
String totals = String.valueOf(this.sysMgrService.getFunctionTotalCount());
List list = this.sysMgrService.findFunctionAll(start, limit);
JSONArray array = JSONArray.fromObject(list);
this.jsonString = "{\"totals\":"+totals+",\"results\":"+array.toString()+"}";
return "functoinJSON";
}
public String getFunctionAll() throws Exception {
//沒有分頁功能
List list = this.sysMgrService.findFunctionAll();
String totals = String.valueOf(list.size());
//有分頁功能
//String totals = String.valueOf(this.sysMgrService.getFunctionTotalCount());
//List list = this.sysMgrService.findFunctionAll(start, limit);
JSONArray array = JSONArray.fromObject(list);
this.jsonString = "{\"totals\":"+totals+",\"results\":"+array.toString()+"}";
return "functoinJSON";
}
public String getTitle() throws Exception {
//沒有分頁功能
//List list = this.sysMgrService.findTitleAll();
//有分頁功能
String totals = String.valueOf(this.sysMgrService.getTitleTotalCount());
List list = this.sysMgrService.findTitleAll(start, limit);
JSONArray array = JSONArray.fromObject(list);
this.jsonString = "{\"totals\":"+totals+",\"results\":"+array.toString()+"}";
return "titleJSON";
}
public String comboFormSubmit() throws Exception{
this.jsonString = "{\"success\":\"true\",\"funcId\":\""+function01+"\",\"grade\":\""+grade01+"\"}";
return "comboFormJSON";
}
public String getMovies() throws Exception {
//有分頁功能
String totals = String.valueOf(this.sysMgrService.getMoviesTotalCount());
List list = this.sysMgrService.findMovieAll(start, limit);
JSONArray array = JSONArray.fromObject(list);
this.jsonString = "{\"totals\":"+totals+",\"results\":"+array.toString()+"}";
return "outputJSON";
}
public String updateMovies() throws Exception {
if(action!=null && action.equals("delete")){
if(this.sysMgrService.deleteMovie(id).equals("success")){
this.jsonString = "{\"success\":\"true\"}";
}else{
this.jsonString = "{\"failure\":\"true\"}";
}
}else if(action!=null && action.equals("update")){
if(this.sysMgrService.updateMovie(values).equals("success")){
this.jsonString = "{\"success\":\"true\"}";
}else{
this.jsonString = "{\"failure\":\"true\"}";
}
}
return "outputJSON";
}
public SysMgrService getSysMgrService() {
return sysMgrService;
}
public void setSysMgrService(SysMgrService sysMgrService) {
this.sysMgrService = sysMgrService;
}
public String getJsonString() {
return jsonString;
}
public void setJsonString(String jsonString) {
this.jsonString = jsonString;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public String getFunction01() {
return function01;
}
public void setFunction01(String function01) {
this.function01 = function01;
}
public String getGrade01() {
return grade01;
}
public void setGrade01(String grade01) {
this.grade01 = grade01;
}
public int[] getId() {
return id;
}
public void setId(int[] id) {
this.id = id;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String[][] getValues() {
return values;
}
public void setValues(String[][] values) {
this.values = values;
}
}
5.2.struts2 config(struts.xml):
<?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"> <struts> <constant name="struts.devMode" value="true"></constant> <constant name="struts.configuration.xml.reload" value="true"></constant> <constant name="struts.i18n.reload" value="true"></constant> <constant name="struts.custom.i18n.resources" value="globalMessages"></constant> <package name="ExtStudy" extends="struts-default"> <action name="SysMgrJson" class="SysMgrJsonAction"> <result name="functoinJSON">JsonJSP/functionJSON.jsp</result> <result name="titleJSON">JsonJSP/titleJSON.jsp</result> <result name="comboFormJSON">JsonJSP/comboFormJSON.jsp</result> <result name="outputJSON">JsonJSP/outputJSON.jsp</result> </action> </package> </struts>
5.3.spring config(applicationContext.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 直接使用dbcp當dataSource
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mytest"></property>
<property name="username" value="manning"></property>
<property name="password" value="action"></property>
<property name="maxActive" value="50"></property>
<property name="maxIdle" value="50"></property>
<property name="maxWait" value="100"></property>
<property name="defaultAutoCommit" value="true"></property>
</bean>
-->
<!-- 使用jndi當dataSource -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<!-- 當resourceRef=false,則jndiName需加上java:comp/env字元,resourceRef其default value=false
<property name="resourceRef">false</property>
<property name="jndiName" value="java:comp/env/jdbc/MytestDB"></property>
-->
<property name="resourceRef" value="true"></property>
<property name="jndiName" value="jdbc/CMSDB"></property>
<property name="proxyInterface" value="javax.sql.DataSource"></property>
</bean>
<!-- spring use jdni with weblogic config
<bean id="jndiDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="resourceRef" value="true"></property>
<property name="jndiName" value="MySqlDataSource"></property>
<property name="jndiEnvironment">
<props>
<prop key="java.naming.provider.url">t3://localhost:7001</prop>
</props>
</property>
</bean>
-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
</list>
</property>
</bean>
<!-- DAO -->
<bean id="SysMgrDAO" class="com.dao.impl.test.SysMgrDAOImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<!-- Service -->
<bean id="SysMgrService" class="com.service.impl.test.SysMgrServiceImpl">
<property name="sysMgrDAO" ref="SysMgrDAO"></property>
</bean>
<!-- Action -->
<bean id="SysMgrJsonAction" class="com.action.test.SysMgrAction" scope="prototype">
<property name="sysMgrService" ref="SysMgrService"></property>
</bean>
</beans>
三、測試結果:
1.http://localhost:8080/ExtStudy/Basic/editGrid2.jsp





沒有留言:
張貼留言