📄 javaeye技术网站.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0059)http://zhangljerry.javaeye.com/category/9989?show_full=true -->
<HTML dir=ltr xml:lang="zh-CN"
xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>zhangljerry - JavaEye技术网站</TITLE>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<META content="" name=description>
<META content="zhangljerry zhangljerry" name=keywords><LINK
href="/images/favicon.ico" type=image/x-icon rel="shortcut icon"><LINK
title=zhangljerry href="/rss" type=application/rss+xml rel=alternate><LINK
media=screen href="JavaEye技术网站_files/blog.css" type=text/css
rel=Stylesheet><LINK media=screen href="JavaEye技术网站_files/purple.css"
type=text/css rel=Stylesheet>
<SCRIPT src="JavaEye技术网站_files/application.js" type=text/javascript></SCRIPT>
<STYLE>DIV#main {
BORDER-TOP-WIDTH: 0px; PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; PADDING-BOTTOM: 0px; WIDTH: 740px; PADDING-TOP: 0px; BACKGROUND-COLOR: transparent; BORDER-RIGHT-WIDTH: 0px
}
</STYLE>
<META content="MSHTML 6.00.6000.16640" name=GENERATOR></HEAD>
<BODY>
<DIV id=header>
<DIV id=site_logo><A href="http://www.javaeye.com/blogs"><IMG
title=JavaEye-最棒的软件开发交流社区 alt=JavaEye3.0
src="JavaEye技术网站_files/logo_small.gif"></A></DIV>
<UL id=user_nav>
<LI class=last><A href="http://zhangljerry.javaeye.com/index/help">帮助</A>
</LI>
<LI><A href="http://zhangljerry.javaeye.com/search">搜索</A> </LI>
<LI><A href="http://zhangljerry.javaeye.com/signup">注册</A> </LI>
<LI><A href="http://zhangljerry.javaeye.com/login">登录</A> </LI>
<LI class=highlight><SPAN>您还没有登录 !</SPAN> </LI></UL></DIV>
<DIV id=page>
<DIV class=clearfix id=branding>
<DIV id=blog_name>
<H1><A href="http://zhangljerry.javaeye.com/">zhangljerry</A></H1></DIV>
<DIV id=blog_preview></DIV>
<DIV id=blog_domain>永久域名 <A
href="http://zhangljerry.javaeye.com/">http://zhangljerry.javaeye.com/</A></DIV></DIV>
<DIV class=clearfix id=content>
<DIV id=main>
<DIV class=blog_main>
<DIV class=blog_title>
<H5>2007-06-29</H5>
<DIV class=show_full_flag><A
href="http://zhangljerry.javaeye.com/category/9989?show_full=false">缩略显示</A></DIV>
<H3><A
href="http://zhangljerry.javaeye.com/blog/95599">ajax的url编码问题</A></H3></DIV>
<DIV class=blog_content>在进行ajax的post数据提交时,中文的c处理方式是urlencode
<BR>需要二次的javascript的函数encodeURI() <BR>进行提交 <BR><BR>在服务器的jsp和action处理时需要
<BR>String dd=request.getParamenter("dd"); <BR>Strin
s=urlDecoder.decode(dd,"UTF-8"); <BR><BR><BR>对javascript的encodeURI()的二次应用是需要注意的
</DIV>
<DIV class=blog_bottom>
<UL>
<LI>18:51 </LI>
<LI>浏览 (309) </LI>
<LI><A href="http://zhangljerry.javaeye.com/blog/95599#comments">评论</A> (0)
</LI>
<LI>分类: <A href="http://zhangljerry.javaeye.com/category/9989">web2.0</A>
</LI></UL></DIV></DIV>
<DIV class=blog_main>
<DIV class=blog_title>
<H5>2007-06-06</H5>
<DIV class=show_full_flag><A
href="http://zhangljerry.javaeye.com/category/9989?show_full=false">缩略显示</A></DIV>
<H3><A
href="http://zhangljerry.javaeye.com/blog/87328">Javascript变换表格内容</A></H3></DIV>
<DIV class=blog_content>[code<script language="javascript"> <BR>//
JavaScript Document <BR>var colorArray = new Array; <BR>colorArray[0] =
"#0066ff" <BR>colorArray[1] = "#105409" <BR>colorArray[2] = "#9a0000"
<BR>colorArray[3] = "#9f6b39" <BR>colorArray[4] = "#ffab25" <BR>colorArray[5] =
"#7665e9" <BR>function chh(){ <BR>var obj = window.event.srcElement; <BR>if
(obj.tagName != "TD"){ <BR>return; <BR>} <BR>index = obj.cellIndex; <BR>var J =
obj.id <BR>if (J == index){ <BR>return; <BR>} <BR>for (var i=0;
i<it.cells.length;i++){ <BR>it.cells[i].style.background = colorArray[i]+"
url(images/menu.gif)"; <BR>it.cells[i].className = "jjk"; <BR>it.cells[i].id =
index; <BR>} <BR>obj.className = "jk"; <BR>obj.style.background
=colorArray[index] <BR><BR>for ( i=0; i<content.tBodies.length;i++){
<BR>content.tBodies[i].style.display = "none" <BR>}
<BR>content.tBodies[index].style.display = "block"
<BR>content.tBodies[index].style.background=colorArray[index]
<BR>banner.innerHTML = "<img src=images/"+(index+1)+".jpg width=740
height=190>" <BR>} <BR>function onload(){ <BR>for (i=0; i<it.cells.length;
i++){ <BR>it.cells[i].style.background = "#ccc url(images/menu.gif)"; <BR>}
<BR>it.cells[0].style.background =colorArray[0];
<BR>it.cells[0].style.borderLeft = "1px solid #ffffff" <BR>} <BR></script>
<BR><BR><body onLoad="onload();" > <BR><table width="100%" border="0"
cellspacing="0" cellpadding="0"> <BR><tr> <BR><td width="740"
height="190" id="banner" ><img src="images/1.jpg" width="740"
height="190"></td> <BR></tr> <BR><tr align="left">
<BR><td> <BR><TABLE style="COLOR: white" cellSpacing=0 cellPadding=0
width=740 border=0> <BR><TBODY> <BR><TR id=it onmouseover=chh() >
<BR><TD class=jk id=ABCEDFGHIJKLMNOPQRSTUVWXYZ width=123 height=41> »
<A href="#">测试一</A> </TD> <BR><TD class=jjk width=123
height=41> » <A href="#">测试二</A></TD> <BR><TD class=jjk
width=123 height=41> » <A href="#">测试三</A> </TD> <BR><TD
class=jjk width=123 height=41> » <A href="#">测试四</A> </TD>
<BR><TD class=jjk width=123 height=41> » <A href="">测试五</A>
</TD> <BR></TR> <BR></TBODY> <BR></TABLE>
<BR></td> <BR></tr> <BR><tr> <BR><td><TABLE
id=content cellSpacing=0 cellPadding=0 width=740> <BR><TBODY
style="DISPLAY: block"> <BR><TR bgColor=#0066ff> <BR><TD class=tbody
style="HEIGHT: 80px" width=738></TD> <BR></TR> <BR></TBODY>
<BR><TBODY style="DISPLAY: none"> <BR><TR bgColor=#105409>
<BR><TD class=tbody style="HEIGHT: 80px"> </TD> <BR></TR>
<BR></TBODY> <BR><TBODY style="DISPLAY: none"> <BR><TR
bgColor=#9a0000> <BR><TD class=tbody style="HEIGHT: 80px"> </TD>
<BR></TR> <BR></TBODY> <BR><TBODY style="DISPLAY: none">
<BR><TR bgColor=#9f6b39> <BR><TD class=tbody vAlign=top
align=left></TD> <BR></TR> <BR></TBODY> <BR><TBODY
style="DISPLAY: none"> <BR><TR bgColor=#ffab25> <BR><TD class=tbody
vAlign=top> </TD> <BR></TR> <BR></TBODY> <BR><TBODY
style="DISPLAY: none"> <BR></TBODY> <BR></TABLE> <BR></td>
<BR></tr> <BR></table> <BR>[code] </DIV>
<DIV class=blog_bottom>
<UL>
<LI>11:05 </LI>
<LI>浏览 (257) </LI>
<LI><A href="http://zhangljerry.javaeye.com/blog/87328#comments">评论</A> (0)
</LI>
<LI>分类: <A href="http://zhangljerry.javaeye.com/category/9989">web2.0</A>
</LI></UL></DIV></DIV>
<DIV class=blog_main>
<DIV class=blog_title>
<H5>2007-05-25</H5>
<DIV class=show_full_flag><A
href="http://zhangljerry.javaeye.com/category/9989?show_full=false">缩略显示</A></DIV>
<H3><A href="http://zhangljerry.javaeye.com/blog/83176">struts
ajax</A></H3></DIV>
<DIV class=blog_content>转贴请保留作者--简单就好,和出处。谢谢!
<BR>去年初,正好负责一个医药信息系统的设计开发,架构设计时,采用Struts+JDBC(自定义采用适配器模式封装了HashMap动态VO实现的持久层)。后来ajax热潮兴起,正好系统中有很多地方需要和服务器端交互数据,如采购销售系统中的订单头/订单明细等主从表结构的维护。
<BR>数据交互过程,我们考虑采用xml来组织数据结构,更新/保存:前台封装需要的xml,通过ajax提交---〉action解析xml
---〉改造原有的持久层实现xml持久化; <BR>查询时:持久层根据实际需要返回xml,document对象,---〉action 处理
--〉前台自己封装js库来解析xml,并刷新部分页面。
<BR><BR>ajax:已经有很多方法实现跨浏览器的方式,这里只介绍最简单的方式,同步模式下提交xmlStr给action(*.do)。
<BR><BR><BR>代码 <BR>/** <BR>* 将数据同步传递给后台请求url <BR>* @return 返回xmlhttp 响应的信息 <BR>*
@param-url = '/web/module/xxx.do?p1=YY&p2=RR'; <BR>* @param-xmlStr:xml格式的字符串
<data><xpath><![CDATA[数据信息]]></xpath></data> <BR>*
@author zhipingch <BR>* @date 2005-03-17 <BR>*/ <BR>function sendData(urlStr,
xmlStr) { <BR>var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
<BR>xmlhttp.open("POST", urlStr, false);
<BR>xmlhttp.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded"); <BR>if (xmlStr) {
<BR>xmlhttp.send(xmlStr); <BR>} else { <BR>xmlhttp.send(); <BR>} <BR>return
xmlhttp.responseXml; <BR>}
<BR><BR><BR>struts中我们扩展了Action,实现了xmlStr转化成document对象(dom4j),并且完善了转发方式。如
<BR><BR><BR>引用 <BR><BR>1.DispatchAction
<BR>以一个Controller响应一组动作绝对是Controller界的真理,Struts的DispatchAction同样可以做到这点。
<BR><BR><BR><BR><action path="/admin/user" name="userForm" scope="request"
parameter="method" validate="false"> <BR><forward name="list"
path="/admin/userList.jsp"/> <BR></action>
<BR><BR><BR>其中parameter="method"
设置了用来指定响应方法名的url参数名为method,即/admin/user.do?method=list 将调用UserAction的public
ActionForward list(....) 函数。 <BR><BR>public ActionForward unspecified(....)
函数可以指定不带method方法时的默认方法。 <BR><BR><BR>但是这样需要在url后多传递参数method=list
;并且action节点配置中的parameter="method" <BR>也没有被充分利用,反而觉得是累赘!
<BR><BR>因此我们直接在BaseDispatchAction中增加xml字符串解析,并充分利用action节点配置中的parameter="targetMethod"
,使得转发的时候,action能够直接转发到子类的相应方法中,减少了url参数传递,增强了配置信息可读性,方便团队开发。
<BR>同样以上述为例,扩展后的配置方式如下: <BR><BR><BR>引用 <BR><BR><action path="/admin/user"
scope="request" parameter="list" validate="false"> <BR><forward
name="list" path="/admin/userList.jsp"/> <BR></action>
<BR><BR><BR>其中parameter="list"
设置了用来指定响应url=/admin/user.do的方法名,它将调用UserAction的public ActionForward list(....)
函数。 <BR>BaseDispatchDocumentAction 的代码如下,它做了三件重要的事情:
<BR>1、采用dom4j直接解析xml字符串,并返回document,如果没有提交xml数据,或者采用form形式提交的话,返回null;
<BR>2、采用模版方法处理系统异常,减少了子类中无尽的try{...}catch(){...};其中异常处理部分另作描述(你可以暂时去掉异常处理,实现xml提交和解析,如果你有兴趣,我们可以进一步交流);
<BR>3、提供了Spring配置Bean的直接调用,虽然她没有注入那么优雅,但是实现了ajax、struts、spring的结合。
<BR>BaseDispatchDocumentAction 的源码如下: <BR><BR>代码 <BR>package
com.ufida.haisheng.struts; <BR><BR>import java.io.IOException; <BR>import
java.io.PrintWriter; <BR>import java.lang.reflect.InvocationTargetException;
<BR>import java.lang.reflect.Method; <BR>import java.math.BigDecimal; <BR>import
java.sql.Timestamp; <BR>import java.util.Date; <BR>import java.util.HashMap;
<BR><BR>import javax.servlet.http.HttpServletRequest; <BR>import
javax.servlet.http.HttpServletResponse; <BR>import
javax.servlet.http.HttpSession; <BR><BR>import
org.apache.commons.beanutils.ConvertUtils; <BR>import
org.apache.commons.beanutils.converters.BigDecimalConverter; <BR>import
org.apache.commons.beanutils.converters.ClassConverter; <BR>import
org.apache.commons.beanutils.converters.IntegerConverter; <BR>import
org.apache.commons.beanutils.converters.LongConverter; <BR>import
org.apache.log4j.Logger; <BR>import org.apache.struts.action.Action; <BR>import
org.apache.struts.action.ActionForm; <BR>import
org.apache.struts.action.ActionForward; <BR>import
org.apache.struts.action.ActionMapping; <BR>import
org.apache.struts.util.MessageResources; <BR>import org.dom4j.Document;
<BR>import org.dom4j.io.SAXReader; <BR>import org.hibernate.HibernateException;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -