ssh


一、添加输入校验:
Actionname-validation.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名必须输入</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<message>密码必须输入</message>
</field-validator>
</field>
</validators>

在struts.xml中添加input视图

二、迭代输出list和Map对象
<table border="1" width="200">
<s:iterator value="blog_user" id="name" status="st">
<s:if test="#st.odd"><tr style="background-color:#ccc"></s:if>
<s:else><tr></s:else>
<td><s:property value="#st.count" /><s:property value="username" /><s:property value="password" /><s:property value="sex" />
<s:property value="email" /><s:property value="qq" />
</td>
</tr>
</s:iterator>
</table>

在action里写setter,getter方法载入list对象
setBlog_user(list对象);
即可完成数据库记录的输出

三、利用Spring自动创建bean
spring配置的两种方法(1)struts 伪Action配置
创建:applicationContext.xml spring配置文件,,,为LoginAction注入ms实例

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<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.xsd">

<bean id="myService" class="lee.MyServiceImpl"/>

<bean id="loginAction" class="lee.LoginAction" scope="prototype">
<property name="ms" ref="myService"/>
</bean>
</beans>

struts 2 的配置:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<package name="lee" extends="struts-default">
<action name="login" class="loginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
spring配置的两种方法(2)自动装配设置
创建:applicationContext.xml spring配置文件,,,为LoginAction注入ms实例

<?xml version="1.0" encoding="GBK"?>
<!-- 指定Spring配置文件的Schema信息 -->
<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.xsd">

<bean id="myService" class="lee.MyServiceImpl"/>

</beans>

struts 2 的配置:
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

<package name="lee" extends="struts-default">
<action name="login" class="lee.loginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>

四、用collection存储集合,无法在Action里使用request
Collection data = DAOFactory.getBlog_userDAOInstance().queryAll();
HttpServletRequest request = ServletActionContext.getRequest();
Int curPage = Integer.parseInt(request.getParameter("cur_page"));

五、hibernate分页显示
Java实现分页类2008年01月30日 星期三 14:051.将PageResultSet.java文件编译成class文件,并放入你的Web
应用程序的WEB-INF/classes/com/youngor/util目录下,可以对包名做相应修改。

2.在你的Action类中:
先从业务处理逻辑类中取出数据(ArrayList或Vector格式)
UserBO userBO=new UserBO();
Collection data=userBO.findUsers();//示例方法
再得到当前页curPage和每页记录数pageSize
int curPage = Integer.parseInt(request.getParameter(“cur_page“));
int pageSize=15;
然后生成PageResultSet对象
PageResultSet dataList = new PageResultSet(data, curPage, pageSize);
request.setAttribute("usersList", dataList );

3.在你的JSP页面中:
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page language="java" import="java.util.*"%>
<%@ page language="java" import="com.night.util.*"%>
<%@ page language="java" import="com.night.model.*"%>
<html>
<head>
<title>登录页面</title>
</head>
<body>
<%
PageResultSet pageResultSet = (PageResultSet)request.getAttribute("usersList");
ArrayList usersList=(ArrayList)pageResultSet.getData();
%>

<table border="1">
<%
for(int i=0;i<usersList.size();i++)
{
Blog_user userEO=(Blog_user)usersList.get(i);%>
<tr>
<td><%=userEO.getUsername()%></td>
<td><%=userEO.getPassword()%></td>
<td><%=userEO.getSex()%></td>
<td><%=userEO.getEmail()%></td>
<td><%=userEO.getQq()%></td>
</tr>
<%}%>
</table></td>
</tr>
</table>
<%=pageResultSet.getToolBar("getBlogUser.action")%>

</body>

<!-- 显示分页工具栏 -->
<%=pageResultSet.getToolBar("list_users.do")%>

注意:
1、如果你觉得分页工具栏不能满足你的要求,可以用PageResultSet类中的公共方法
first()、previous()、next()、last()定制自己的工具栏,并且,你还可以在PageResultSet中定义多个样式的工具栏;
2、getToolBar(String url)方法接受带查询字符串的参数,比如“list_users.do?class_id=1“。

//PageResultSet.java
package com.youngor.util;

import java.util.*;

/**
* <p>Title: PageResultSet</p>
*
* <p>Description:分页类 </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* @author:伍维波
* @version 1.0
*/
public class PageResultSet {
/**
* 分页数据
*/
private Collection data = null;
/**
* 当前页
*/
private int curPage;
/**
* 每页显示的记录数
*/
private int pageSize;
/**
* 记录行数
*/
private int rowsCount;
/**
* 页数
*/
private int pageCount;

public PageResultSet(Collection data) {
this.data = data;
this.curPage = 1;
this.pageSize = 10;
this.rowsCount = data.size();
this.pageCount = (int) Math.ceil((double) rowsCount / pageSize);
}

public PageResultSet(Collection data, int curPage) {
this.data = data;
this.curPage = curPage;
this.pageSize = 10;
this.rowsCount = data.size();
this.pageCount = (int) Math.ceil((double) rowsCount / pageSize);
}

public PageResultSet(Collection data, int curPage, int pageSize) {
this.data = data;
this.curPage = curPage;
this.pageSize = pageSize;
this.rowsCount = data.size();
this.pageCount = (int) Math.ceil((double) rowsCount / pageSize);
}

/**
* getCurPage:返回当前的页数
*
* @return int
*/
public int getCurPage() {
return curPage;
}

/**
* getPageSize:返回分页大小
*
* @return int
*/
public int getPageSize() {
return pageSize;
}

/**
* getRowsCount:返回总记录行数
*
* @return int
*/
public int getRowsCount() {
return rowsCount;
}

/**
* getPageCount:返回总页数
*
* @return int
*/
public int getPageCount() {
return pageCount;
}
/**
* 第一页
* @return int
*/
public int first() {
return 1;
}
/**
* 最后一页
* @return int
*/
public int last() {
return pageCount;
}
/**
* 上一页
* @return int
*/
public int previous() {
return (curPage - 1 < 1) ? 1 : curPage - 1;
}
/**
* 下一页
* @return int
*/
public int next() {
return (curPage + 1 > pageCount) ? pageCount : curPage + 1;
}

/**
* 第一页
* @return boolean
*/
public boolean isFirst() {
return (curPage==1)?true:false;
}

/**
*最后一页
* @return boolean
*/
public boolean isLast() {
return (curPage==pageCount)?true:false;
}
/**
* 获取当前页数据
* @return Collection
*/
public Collection getData() {
Collection curData = null;
if (data != null) {
int start = (curPage - 1) * pageSize;
int end = 0;
if (start + pageSize > rowsCount)
end = rowsCount;
else
end = start + pageSize;
ArrayList arrayCurData = new ArrayList();
ArrayList arrayData = null;
Vector vectorCurData = new Vector();
Vector vectorData = null;
boolean isArray = true;
if (data instanceof ArrayList) {
arrayData = (ArrayList) data;
isArray = true;
} else if (data instanceof Vector) {
vectorData = (Vector) data;
isArray = false;
}
for (int i = start; i < end; i++) {
if (isArray) {
arrayCurData.add(arrayData.get(i));
} else {
vectorData.add(vectorData.elementAt(i));
}
}
if (isArray) {
curData = (Collection) arrayCurData;
} else {
curData = (Collection) vectorCurData;
}
}
return curData;
}
/**
* 获取工具条
* @return String
*/
public String getToolBar(String fileName){
String temp="";
if(fileName.indexOf("?")==-1)
{
temp="?";
}
else
{
temp="&";
}
String str="<form method='post' name='frmPage' action='"+fileName+"'>";
str+="<p align='center'>";
if(isFirst())
str+="首页 上一页 ";
else
{
str+="<a href='"+fileName+temp+"cur_page=1'>首页</a> ";
str+="<a href='"+fileName+temp+"cur_page="+(curPage-1)+"'>上一页</a> ";
}
if(isLast())
str+="下一页 尾页 ";
else
{
str+="<a href='"+fileName+temp+"cur_page="+(curPage+1)+"'>下一页</a> ";
str+="<a href='"+fileName+temp+"cur_page="+pageCount+"'>尾页</a> ";
}
str+=" 共<b>"+rowsCount+"</b>条记录 ";
str +=" 转到<select name='page' onChange=/"location='"+fileName+temp+"cur_page='+this.options[this.selectedIndex].value/">";
for(int i=1;i<=pageCount;i++)
{
if(i==curPage)
str+="<option value='"+i+"' selected>第"+i+"页</option>";
else
str+="<option value='"+i+"'>第"+i+"页</option>";
}
str+="</select></p></form>";
return str;
}
}

六、html用字符串request传入jsp
<% String aa="<table border='1' width='100' height='500' bordercolor='#00CCFF' bgcolor='#3366FF'><tr><td></td></tr></table>"; %>
<%=aa%>

七、怎么样把输入的String转换成html
public static String toHTMLString(String in) {
StringBuffer out = new StringBuffer();
for (int i = 0; in != null && i < in.length(); i++) {
char c = in.charAt(i);
if (c == '/'')
out.append("'");
else if (c == '/"')
out.append(""");
else if (c == '<')
out.append("<");
else if (c == '>')
out.append(">");
else if (c == '&')
out.append("&");
else if (c == ' ')
out.append(" ");
else if (c == '/n')
out.append("<br/>");
else
out.append(c);
}
return out.toString();
}

八、struts2中文乱码解决
中文乱码的问题。
 1在struts2里面,最好将所有字符都设成utf-8。
  1.1 在jsp页面设定字符编码。这边有必有说明的是如果是jsp+java bean+servlet的方案。中文乱码很好解决,统一设成gb2312就可以了。但如果用struts框架就不能设成gb2312,要改成utf-8。
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page pageEncoding="UTF-8" %>
 2.2 在struts.properties 添加:
struts.devMode=false
struts.enable.DynamicMethodInvocation=true
struts.i18n.reload=true
struts.ui.theme=simple
struts.locale=zh_CN
struts.i18n.encoding=UTF-8
struts.serve.static.browserCache=false
struts.url.includeParams=none
其中locale、encoding就是字符集的设定了。
2.3 在web.xml加个filter
如下:
  <!-- zh-cn encoding -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 通过上述方法,基本就可以搞定中文乱码的问题了。当然,也有例外。象在我的一个项目碰到一个中文乱码,就是从页面跳转到另一个页面,然后update进mysql。结果乱码。后来才发现是页面重复设定字符集了。
九、struts2解决提交表单中文乱码解决

struts2解决表单提交中文乱码
2007-12-12 20:31:55.0 作者:justin 来源:本站原创[收藏此文章]
import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.struts2.dispatcher.FilterDispatcher;

public class MyFilterDispatcher extends FilterDispatcher {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

req.setCharacterEncoding("UTF-8");
super.doFilter(req, res, chain);
}

}

其实很简单就是,重写struts2的核心控制器 FilterDispatcher中的doFilter方法。

但然,也要在web.xml中配置一下,将以前的FileterDispatcher改成这个类的包+类名

但这种方法有以下弱点

1.表单提交必须为utf-8,显示结果的页面也必须为utf-8,也就是说这个应用所有都为utf-8.

当然,在doFilter方法中也可以使用req.setCharacterEncoding("GB2312");,这样,你的整个应用

就要全部使用GB2312编码了,包括页面,类,数据库。
在struts.properties文件中加入struts.i18n.encoding=gb2312
gb2312的编码我没有尝试过,我习惯使用utf-8的,大家可以试试,如果有问题,请告诉我,谢谢。

2.这种无法解决请求指数为乱码的问题,如:deleteUser.action?name=张三,这种参数就无法转换成正常显示的文字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值