??xml version="1.0" encoding="utf-8" standalone="yes"?>
q里生成Excel用的是POI的API
WebWork中定义ResultType视图cd只需要承Result接口
代码如下
package com.customer.resulttype;
import com.opensymphony.xwork.Result;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.webwork.ServletActionContext;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
public class ExcelResult implements Result{
private HSSFWorkbook workbook;
private String filename;
private String contenttype;
public void execute(ActionInvocation invocation) throws Exception {
if(contenttype==null)
contenttype = "application/ms-excel";
if (workbook==null)
workbook = (HSSFWorkbook) invocation.getStack().findValue("workbook");
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType(contenttype);
response.setHeader("Content-Disposition","attachment;Filename="+filename+".xls");
OutputStream os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
}
public void setWorkbook(HSSFWorkbook workbook) {
this.workbook = workbook;
}
public void setFilename(String filename) {
this.filename = filename;
}
public void setContenttype(String contenttype) {
this.contenttype = contenttype;
}
}
视图做完之后做如下配|运行测?br />
package com.customer.action;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.webwork.ServletActionContext;
import com.dboperate.ResultGather;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Map;
public class ExportExcelAction extends ActionSupport {
private HSSFWorkbook workbook;
public String execute() throws Exception {
return SUCCESS;
}
public String product() throws Exception {
try {
workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, "厂商产品", (short) 1);
HSSFRow row = sheet.createRow((short) 0);
HSSFCell cell0 = row.createCell((short) 0);
HSSFCell cell1 = row.createCell((short) 1);
HSSFCell cell2 = row.createCell((short) 2);
HSSFCell cell3 = row.createCell((short) 3);
HSSFCell cell4 = row.createCell((short) 4);
HSSFCell cell5 = row.createCell((short) 5);
HSSFCell cell6 = row.createCell((short) 6);
HSSFCell cell7 = row.createCell((short) 7);
HSSFCell cell8 = row.createCell((short) 8);
HSSFCell cell9 = row.createCell((short) 9);
cell0.setEncoding(HSSFCell.ENCODING_UTF_16);//q里是设|编码保证中文正常显C?br /> cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
cell4.setEncoding(HSSFCell.ENCODING_UTF_16);
cell5.setEncoding(HSSFCell.ENCODING_UTF_16);
cell6.setEncoding(HSSFCell.ENCODING_UTF_16);
cell7.setEncoding(HSSFCell.ENCODING_UTF_16);
cell8.setEncoding(HSSFCell.ENCODING_UTF_16);
cell9.setEncoding(HSSFCell.ENCODING_UTF_16);
cell0.setCellValue("厂商?);
cell1.setCellValue("产品?);
cell2.setCellValue("重量");
cell3.setCellValue("星");
cell4.setCellValue("parama");
cell5.setCellValue("paramb");
cell6.setCellValue("paramc");
cell7.setCellValue("paramd");
cell8.setCellValue("状?);
cell9.setCellValue("备注");
} catch (Exception e) {
}
return SUCCESS;
}
public HSSFWorkbook getWorkbook() {
return workbook;
}
}
Xwork.xml中配|加?br />
<result-type default="true" name="freemarker"
<result-type name="excel" class="com.customer.resulttype.ExcelResult"/>
</result-types>
<action name="exportExcel" class="com.customer.action.ExportExcelAction">
<result name="success" type="excel">
<param name="filename">productparam>
</result>
</action>
public String update() throws Exception {
....
}
public String delete() throws Exception {
....
}
public String list() throws Exception {
....
}
DAO
下面是DAO接口
public interface BaseDao {
public int insert(Object form);
public int update(Object form);
public int delete(Object form);
public int delete(int[] id);//q里是ؓ了支持批量删?br /> public Map getInfo(Object form);
public List getList();
public void getList(Pagination page);//q里没有q回|内详。。。?br />}
EXTENDS
扩展部分
1 BaseAction
q里增加了一些公用方便的功能Q便于其他ACTIONl承Q共?br />2 DaoSupport
q里也是一些公用的功能QDao中用的大部分SQL都是配置在外部配|文件中
3DaoFactory
public class DaoFactory {
public static BaseDao getDao(String daoKey){
if("user".equals(daoKey)) //q样的方式可以通过在XWORK.XML中配|ACTION使用哪个DAOQ静态注入)
return new UserDao();
else
return null;
}
}
数据库是MYSQL5
CREATE TABLE `usertbl` (
`User_ID` int(11) NOT NULL auto_increment,
`username` varchar(50) default NULL,
`password` varchar(50) default NULL,
`truename` varchar(50) default NULL,
`usersex` tinyint(4) default NULL,
`useremail` varchar(50) default NULL,
PRIMARY KEY (`User_ID`)
)
源码下蝲地址
http://www.migti.com/download.ww
学习的时候看了网上的一些配|教E,没有辑ֈ惌的结?BR>查了好多资料才弄出来Q随后后自己整理Z个配|方?BR>
web.xml
// q里不需要配|字W过滤,|上有的例子加了Q实际上
webwork.properties里设|如下就可以了页面也是GBK
webwork.locale=zh_CN
webwork.i18n.encoding=GBK
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?BR><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.atlassian.xwork.ext.ResolverSetupServletContextListener</listener-class>
</listener>
<!--
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
-->
<servlet>
<servlet-name>webwork</servlet-name>
<servlet-class>com.opensymphony.webwork.dispatcher.ServletDispatcher</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>com.opensymphony.webwork.views.freemarker.FreemarkerServlet</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>webwork</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/webwork.tld</taglib-location>
</taglib>
</web-app>
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-Q?BR>
xwork.xml
==================---------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" "http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="users" extends="webwork-default"
externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver">
<interceptors>
<interceptor name="reference-resolver" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>
<interceptor-stack name="myDefaultWebStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="reference-resolver"/>
<interceptor-ref name="model-driven"/>
<interceptor-ref name="params"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myDefaultWebStack"/>
<action name="blogUser" class="com.jsblog.action.BlogUserAction">
<external-ref name="baseDao">baseDaoTarget</external-ref> //q里是把applicationContext里配|的DAO 注入action?action里要有baseDao属?BR> <result name="success">/add.htm</result>
</action>
-------------------------------------------------------------------------
applicationContext.xml
---------------------------------------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="no" default-dependency-check="none" default-lazy-init="false">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</property>
<property name="url">
<value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=jsblog;SelectMethod=cursor</value>
</property>
<property name="username">
<value>sa</value>
</property>
<property name="password">
<value>jfy</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate.LocalSessionFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="mappingResources">
<list>
<value>com/jsblog/BlogUserForm.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
net.sf.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="baseDaoTarget" class="com.jsblog.dao.BlogUserDao">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
</beans>
---------------------------------------------------------------------------
BlogUserDao.java
---------------------------------------------------------------------------
package com.jsblog.dao;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
import org.springframework.orm.hibernate.HibernateCallback;
import org.springframework.orm.hibernate.SessionFactoryUtils;
import com.jsblog.BlogUserForm;
import java.io.Serializable;
import java.util.List;
import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Session;
public class BlogUserDao extends HibernateDaoSupport implements BaseDao {
public void insert(BlogUserForm bloguser) {
getHibernateTemplate().save(bloguser);
}
}
W一U用ActionContextc,所有的参数都从q里ActionContext.getContext().getParameters()?BR>他返回的是一个Mapcd
Map param= ActionContext.getContext().getParameters();
如果有一个提交过来的username
那就可以q样?BR>param.get("username");不过q里要注意一下param.get("username")是一个String数组(Z么要q回数据我也不知道,我从weblogicH口看到param.get("username")被out出来Ljava.lang.StringQ忙zM半天)
String value[] = (String[])param.get("username");
String username = "";
for(int i=0;i<value.length;i++)
{
username +=value[i];
}
q样可以得到正的username?/P>
W二U方法是直接把request引用q来
ServletActionContext.getRequest().getParameter("username")
ServletActionContext.getRequest()是httpservletrequest
q个cdimport com.opensymphony.webwork.ServletActionContext
用v来方便些
刚刚接触了FreeMarker觉得不错
做了个小例子
刚刚接触了FreeMarker觉得不错做了个小例子,没有用到jsp和jsptag
首先建立个数据表里面有username,password两个字段自己随便加几条数?BR>建立一个webwork action TestAction.java
在xwork.xml里加入如下内?BR>----------------------------------------
----------------------------------------
TestAction.java代码如下
--------------------------------------------------
package com.action;
import com.opensymphony.xwork.ActionSupport;
import java.util.*;
import com.ResultGather;
public class TestAction extends ActionSupport
{
private List lis;
private ResultGather rs;
public List getLis()
{
return this.lis;
}
public String execute() throws Exception
{
rs = new ResultGather();
lis = rs.selectRS("select * from userbasedatum");//数据l果我是用List,HashMap装?HashMap存的是单条记?BR> return SUCCESS;
}
}
-------------------------------------------------------------------------------------------------------------------
ResultGather.java代码如下
----------------------------------------------------------
package com;
import conn.DBConnManager;//数据库连接池
import java.sql.*;
import java.util.*;
public class ResultGather
{
private String sql;
public ResultGather()
{
}
public ResultGather(String sqlcom)
{
this.sql=sqlcom;
}
public List selectRS(String sqlStr)
{
this.sql = sqlStr;
return selectRS();
}
public List selectRS() //数据l果在这里装入List和Map
{
List rsall = new ArrayList();
DBConnManager conn = null;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
Map rsTree;
try{
conn = DBConnManager.getInstance();
con = conn.getConnection("mssql");
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
while(rs.next())
{
rsTree = new HashMap(numberOfColumns);
for(int r=1;r
rsTree.put(rsmd.getColumnName(r),rs.getObject(r));
}
rsall.add(rsTree);
}
}catch(java.lang.Exception ex){
ex.printStackTrace();
}finally{
try{
if(rs!=null)
rs.close();
if(stmt!=null)
stmt.close();
if(conn!=null)
conn.releaseConnection("mssql",con);
}catch(Exception e){
System.out.println(e);
}
}
return rsall;
}
}
-----------------------------------------------------------------------------------------------
test.flt代码如下
-----------------------------------------------------------------------------------------
<#list lis as x>
${x.username},
${x.password}
</#list>
#LIST> //freemarker用法|上有相关介l?BR>-------------------------------------------------------------------------------------
OK 完成?没有用到jsp<%.....%>和jsptag
用这个例子做一点修改就可以h分页用能?/P>