<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>icanfly</title>
    <description></description>
    <link>http://icanfly.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>纪念比尔的离去</title>
        <author>icanfly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
          链接：<a href="http://icanfly.javaeye.com/blog/208605" style="color:red;">http://icanfly.javaeye.com/blog/208605</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="color: green">   <span style="font-size: x-small">今天盖茨正式离开微软了，他的离去也将预示着一个朝代的过去，一个比尔领导的有着辉煌战绩的软件帝国。<br />   心里还是有说不出的遗憾，说实施真的很佩服盖茨，他是一个伟大的人物，我在我的有限记忆中，第一次听到的是他是世上最有钱的，是他创造的微软帝国。<br />但是最近的新闻让我又更产生了一丝遗憾，听说比尔是因为在公司已经没有了发言权，说的话已经没有号召力了，所以才被迫隐退。<br />   哎，时代弄人，如果如传言一样，那么比尔的隐退又代表了些什么呢？<br />   今天也许也会因为比尔的隐退而伤感吧！也许我更应该高兴世上有了一个更多时间和精力投入慈善事业的老人！<br />   记住这个时刻，2008－6－27日，比尔离去！一个帝国时代离去！</span></span>
          <br/>
          <span style="color:red;">
            <a href="http://icanfly.javaeye.com/blog/208605#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jun 2008 12:47:38 +0800</pubDate>
        <link>http://icanfly.javaeye.com/blog/208605</link>
        <guid>http://icanfly.javaeye.com/blog/208605</guid>
      </item>
      <item>
        <title>myeclipse 6.5发布</title>
        <author>icanfly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
          链接：<a href="http://icanfly.javaeye.com/blog/206802" style="color:red;">http://icanfly.javaeye.com/blog/206802</a>&nbsp;
          发表时间: 2008年06月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          myeclipse 6.5正式发布了，下载地址：http://www.myeclipseide.org/index.php?name=Downloads&req=viewsdownload&sid=24增强了JSF支持，更新了Spring,Hibernate，令人可惜的是仍然没有对struts2提供支持！哎！
          <br/>
          <span style="color:red;">
            <a href="http://icanfly.javaeye.com/blog/206802#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 22 Jun 2008 03:10:53 +0800</pubDate>
        <link>http://icanfly.javaeye.com/blog/206802</link>
        <guid>http://icanfly.javaeye.com/blog/206802</guid>
      </item>
      <item>
        <title>struts2整合jasperreport学习笔记</title>
        <author>icanfly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
          链接：<a href="http://icanfly.javaeye.com/blog/201367" style="color:red;">http://icanfly.javaeye.com/blog/201367</a>&nbsp;
          发表时间: 2008年06月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          除了struts2必备的jar包外还需导入下面的包：<br />commons-beanutils-1.7.0.jar<br />commons-codec-1.3.jar<br />commons-collections-3.1.jar<br />commons-digester-1.7.jar<br />commons-el-1.0.jar<br />commons-lang-2.1.jar<br />itext-1.4.1.jar<br />iTextAsian.jar<br />struts2-jasperreports-plugin-2.0.11.1.jar<br />jasperreports-3.0.0.jar<br /><br />第一步是设计报表文件：用的工具是ireport，可以进行可视化设计，设计好后，保存为jrxml或xml后缀后文件以备后用。<br /><br />第二步编写Action类：<br /><pre name="code" class="java">
import java.io.File;
import java.util.List;

import net.sf.jasperreports.engine.JasperCompileManager;

import org.apache.struts2.ServletActionContext;

import com.gfs.daoAction.DaoAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class ShowReport extends ActionSupport {

	@SuppressWarnings("unchecked")
	@Override
	public String execute() throws Exception {
		DaoAction dao = new DaoAction();
		reportlist = dao.queryAll();
		try {
			String reportSource;
			reportSource = ServletActionContext.getServletContext()
					.getRealPath("/report/MyFirstReport.jrxml");
			File parent = new File(reportSource).getParentFile();
			JasperCompileManager.compileReportToFile(reportSource, new File(
					parent, "MyFirstReport.jasper")
					.getAbsolutePath());
		} catch (Exception e) {
			e.printStackTrace();
			return ERROR;
		}
		return SUCCESS;
	}

	public List getReportlist() {
		return reportlist;
	}

}
</pre><br /><br />第三步在WebRoot目录下建立文件夹report，将设计好的报表xml文件（MyFirstReport.jrxml)放到此目录下,在WebRoot目录下再建一个目录images，将jasperreport-3.0.0.jar包下jasperreports-3.0.0\net\sf\jasperreports\engine\images\pixel.gif文件复制到images目录下，并改名为px即可。<br /><br />第四步配置struts.xml:<br /><pre name="code" class="xml">
&lt;package name="report" extends="struts-default,jasperreports-default">
		&lt;action name="showReport" class="com.gfs.action.ShowReport">
			&lt;result name="success" type="jasper">
				&lt;param name="location">
					/report/MyFirstReport.jasper
				&lt;/param>
				&lt;param name="dataSource">reportlist&lt;/param>
			&lt;/result>
		&lt;/action>
	&lt;/package>
</pre><br /><br />第五步编写JSP页面：<br /><pre name="code" class="html">
	&lt;body>
		&lt;s:url action="showReport" id="action" />
		&lt;a href="&lt;s:property value='action'/>">显示报表&lt;/a>
	&lt;/body>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://icanfly.javaeye.com/blog/201367#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 08 Jun 2008 16:43:25 +0800</pubDate>
        <link>http://icanfly.javaeye.com/blog/201367</link>
        <guid>http://icanfly.javaeye.com/blog/201367</guid>
      </item>
      <item>
        <title>struts2页面传值问题</title>
        <author>icanfly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
          链接：<a href="http://icanfly.javaeye.com/blog/199185" style="color:red;">http://icanfly.javaeye.com/blog/199185</a>&nbsp;
          发表时间: 2008年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          传值页面： <br /><pre name="code" class="html">
&lt;s:iterator value="#session.users" status="index">  
                &lt;tr &lt;s:if test="#index.odd">style="background-color:#bbbbbb"&lt;/s:if>>  
  
                    &lt;td>  
                        &lt;s:property value="name" />  
                    &lt;/td>  
                    &lt;td>  
                        &lt;s:property value="password" />  
                    &lt;/td>  
                    &lt;td>  
                        &lt;s:property value="age" />  
                    &lt;/td>  
                    &lt;td>  
                    &lt;s:set name="user" value="#index" scope="session">&lt;/s:set>  
                        &lt;a href="Register!delete.action">删除&lt;/a>  
                    &lt;/td>  
                &lt;/tr>  
            &lt;/s:iterator>  

&lt;s:iterator value="#session.users" status="index">
				&lt;tr &lt;s:if test="#index.odd">style="background-color:#bbbbbb"&lt;/s:if>>

					&lt;td>
						&lt;s:property value="name" />
					&lt;/td>
					&lt;td>
						&lt;s:property value="password" />
					&lt;/td>
					&lt;td>
						&lt;s:property value="age" />
					&lt;/td>
					&lt;td>
					&lt;s:set name="user" value="#index" scope="session">&lt;/s:set>
						&lt;a href="Register!delete.action">删除&lt;/a>
					&lt;/td>
				&lt;/tr>
			&lt;/s:iterator>
</pre><br /><br /><br />Action中的delete方法如下： <br /><pre name="code" class="java">
public String delete()   
{   
    UserInf user = (UserInf) ActionContext.getContext().getSession().get("user");   
    System.out.println(user.getName());   
    DaoAction dao = new DaoAction();   
    dao.delete(user);   
    return SUCCESS;   
}  

	public String delete()
	{
		UserInf user = (UserInf) ActionContext.getContext().getSession().get("user");
		System.out.println(user.getName());
		DaoAction dao = new DaoAction();
		dao.delete(user);
		return SUCCESS;
	}

</pre><br /><br />有异常发生： <br />javax.servlet.ServletException: java.lang.ClassCastException: org.apache.struts2.views.jsp.IteratorStatus <br />org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) <br />org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) <br />我以为是因为数组原因错误，所以又改成了如下：<br /><pre name="code" class="java">
public String delete()   
{   
    UserInf user = (UserInf) ActionContext.getContext().getSession().get("user");   
    System.out.println(user.getName());   
    DaoAction dao = new DaoAction();   
    dao.delete(user);   
    return SUCCESS;   
}  

	public String delete()
	{
		UserInf[] user = (UserInf[]) ActionContext.getContext().getSession().get("user");
		System.out.println(user.getName());
		DaoAction dao = new DaoAction();
		dao.delete(user[0]);
		return SUCCESS;
	}

</pre><br /><br />结果又报另外一错误：<br /><br />javax.servlet.ServletException: java.lang.ClassCastException: org.apache.struts2.views.jsp.IteratorStatus<br />	org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)<br />	org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)<br /><br /><br />我是struts2的初学者，不知道这是什么原因？如何纠正？ 希望热心人能帮我解决一下。
          <br/>
          <span style="color:red;">
            <a href="http://icanfly.javaeye.com/blog/199185#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 01 Jun 2008 19:58:38 +0800</pubDate>
        <link>http://icanfly.javaeye.com/blog/199185</link>
        <guid>http://icanfly.javaeye.com/blog/199185</guid>
      </item>
      <item>
        <title>struts2中的ajax运用</title>
        <author>icanfly</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
          链接：<a href="http://icanfly.javaeye.com/blog/191796" style="color:red;">http://icanfly.javaeye.com/blog/191796</a>&nbsp;
          发表时间: 2008年05月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>最近从书店买了本struts2的书在看，顺便试验了一下书中的AJAX部分。</p>
<p>由于本人是初学编程，而且又是第一次发贴，所以如果有什么不对的地方还请大家批评指正。</p>
<p><span style="font-size: x-small;"><span style="color: #c60a00;">Struts2 Ajax</span>的输入校验不是客户端校验,而是服务器端校验,Struts 2中集成的是时下Java EE平台中比较流行的ajax框架&mdash;&mdash;Dojo和DWR。</span></p>
<p><span style="font-size: x-small;">在开始前先导入struts2的JAR包到WEB-INF/lib目录下。</span></p>
<p><span style="font-size: x-small;">要使用DWR，则要在WEB-INF下生成一个dwr.xml文件内容如下：</span></p>
<p><span style="font-size: x-small;">dwr.xml:</span></p>
<p>&lt;!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt; &lt;dwr&gt; &lt;allow&gt; &lt;create creator="new" javascript="validator"&gt; &lt;param name="class" value="org.apache.struts2.validators.DWRValidator"/&gt; &lt;/create&gt; &lt;convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/&gt; &lt;/allow&gt; &lt;signatures&gt; &lt;![CDATA[ import java.util.Map; import org.apache.struts2.validators.DWRValidator; DWRValidator.doPost(String, String, Map&lt;String, String&gt;); ]]&gt; &lt;/signatures&gt; &lt;/dwr&gt;</p>
<pre></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;这个文件是不用修改的直接COPY过来即可。在上面配置文件中，将org.apache.struts2.validators.DWRValidator类创建成一个JavaScript对象，这个对象名为validator。当然，这里所说的创建是假创建，因为Java类是无法创建JavaScript对象，但DWR提供一种方式，允许当我们在客户端调用validator的方法时，转换成调用DWRValidator实例的方法。值得指出的是，为了让Web应用增加DWR支持，显然还需要将DWR的二进制包复制到Web应用中。即使对于Struts2.0.6正式版，依然不支持DWR的的最新版本（DWR的最新版本是2.0.1），因此只能使用DWR的前一个正式版1.1.3，将dwr-1.1.3.jar文件复制到Web应用中的lib目录下即可。</p>
<p>然后修改web.xml文件：</p>
<p>web.xml:</p>
<p>&lt;?xml version="1.0" encoding="GBK"?&gt; &lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt; &lt;servlet&gt; &lt;servlet-name&gt;dwr&lt;/servlet-name&gt; &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;debug&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/init-param&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;dwr&lt;/servlet-name&gt; &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;!-- 定义Struts2的FilterDispathcer的Filter --&gt; &lt;filter&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt; org.apache.struts2.dispatcher.FilterDispatcher &lt;/filter-class&gt; &lt;/filter&gt; &lt;!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 --&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; &lt;/web-app&gt; </p>
<pre></pre>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;接下来写一个JSP页面：</p>
<p>register.jsp:</p>
<p>&lt;%@ page contentType="text/html;charset=GBK" language="java"%&gt; &lt;%@ taglib prefix="s" uri="/struts-tags"%&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;远程ajax表单&lt;/title&gt; &lt;s:head theme="ajax" /&gt; &lt;/head&gt; &lt;body&gt; &lt;s:div id="mydiv"&gt;&lt;/s:div&gt; &lt;s:div&gt; &lt;s:form id="theForm2" action="AjaxTest" method="post" theme="ajax" validate="true"&gt; &lt;s:textfield name="name" label="请输入你的用户名" /&gt; &lt;s:password name="pass" label="请输入你的密码" /&gt; &lt;s:submit value="登录" targets="mydiv" loadingText="请稍后..." /&gt; &lt;/s:form&gt; &lt;/s:div&gt; &lt;/body&gt; &lt;/html&gt; </p>
<pre></pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;其中一定在在&lt;head&gt;&lt;/head&gt;之间加入<span style="color: #008000;">&lt;s:head theme="ajax" /&gt;</span><span style="color: #000000;">这句话，然后在后面的form中也要将theme设置成ajax，validate设为true,这样struts2就会自动地将form表单内的各个域设成validate为true.validate=true即表明要进行ajax检验。</span></p>
<p>&nbsp;<span style="color: #000000;">下面再写一个AJAX响应JSP页面片断：</span></p>
<p><span style="color: #000000;">AjaxResult.jsp:</span></p>
<p>&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt; &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;% request.setAttribute("decorator", "none"); response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server %&gt; 你的姓名是:&lt;s:property value="name"/&gt;&lt;br&gt; 你的密码是:&lt;s:property value="pass"/&gt; </p>
<pre></pre>
<p>&nbsp;</p>
<p><span style="color: #000000;">下一步要做的就是编写Action类： </span></p>
<p><span style="color: #000000;">AjaxTestAction.java:</span></p>
<p>package test; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; import java.io.Serializable; @SuppressWarnings("serial") public class AjaxTestAction implements Action, Serializable { private String name; private String pass; public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String execute() throws Exception { return SUCCESS; } } </p>
<pre></pre>
<p>&nbsp;&nbsp;</p>
<p><span style="color: #000000;">
<p>&nbsp;接下来是编写验证文件，<span style="color: #ff0000;">在进行struts2 ajax验证是推荐使用校验规则文件来进行，尽量不要使用&ldquo;重写Action类的validate方法</span><span style="color: #ff0000;">，重写该方法来完成ajax校验可能会出现一些未知的异常！</span><span style="color: #000000;">校验规则文件如下：</span>&nbsp;</p>
<p>AjaxTestAction-validation.xml:</p>
&lt;?xml version="1.0" encoding="GBK"?&gt; &lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"&gt; &lt;validators&gt; &lt;field name="name"&gt; &lt;field-validator type="requiredstring"&gt; &lt;param name="trim"&gt;true&lt;/param&gt; &lt;message&gt;必须输入名字&lt;/message&gt; &lt;/field-validator&gt; &lt;field-validator type="regex"&gt; &lt;param name="expression"&gt;&lt;![CDATA[(\w{4,25})]]&gt;&lt;/param&gt; &lt;message&gt;您输入的用户名只能是长度在4到25之间的字母或数字&lt;/message&gt; &lt;/field-validator&gt; &lt;/field&gt; &lt;field name="pass"&gt; &lt;field-validator type="requiredstring"&gt; &lt;param name="trim"&gt;true&lt;/param&gt; &lt;message&gt;必须输入密码&lt;/message&gt; &lt;/field-validator&gt; &lt;field-validator type="regex"&gt; &lt;param name="expression"&gt;&lt;![CDATA[(\w{4,25})]]&gt;&lt;/param&gt; &lt;message&gt;您输入的密码只能是长度在4到25之间的字母或数字&lt;/message&gt; &lt;/field-validator&gt; &lt;/field&gt; &lt;/validators&gt;
<pre></pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>最后一步啦！修改struts2 Action配置文件：</p>
<p>struts.xml:&nbsp;</p>
&lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"&gt; &lt;struts&gt; &lt;package name="ajax" extends="struts-default"&gt; &lt;action name="AjaxTest" class="test.AjaxTestAction"&gt; &lt;result name="success"&gt;/AjaxResult.jsp&lt;/result&gt; &lt;result name="input"&gt;/register.jsp&lt;/result&gt; &lt;/action&gt; &lt;/package&gt; &lt;/struts&gt;
<pre></pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;一切准备就绪，启动服务器，在地址栏中输入以下地址：<a href="http://localhost:8080/Test/register.jsp"><span style="color: #993366;">http://localhost:8080/Test/register.jsp</span></a>就可以看到登录界面，在用户名和密码框中如果你输入的信息不正确，那么在该组件失去焦点后，ajax组件就会将用户名和密码框的值传到服务器进行校验，然后将校验结果返回客户端从而达到很好的用户体验。</p>
<p>最后想要说明一点是：<span style="color: #993366;">在struts2以前版本中对DWR有一些BUG，不过好像在最新的struts 2.0.11.1中已经解决，建议大家将struts2升级至最新版本。</span></p>
<p><span style="color: #000000;">还有一个我在练习中犯的一个错误，就是当我想用AjaxResult.jsp返回内容填充我原来的theForm2时，theForm2的内容会被刷掉，也就是不能引用原来theForm2内容的组件。这时如果在AjaxResult.jsp中使用&lt;s:property value="name"/&gt;时会出现问题。不知道我分析的对不对！如有错误还请批评指正。文件内容如下：</span></p>
<p><span style="color: #000000;">register.jsp:</span>&nbsp;</p>
&lt;%@ page contentType="text/html;charset=GBK" language="java"%&gt; &lt;%@ taglib prefix="s" uri="/struts-tags"%&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;远程ajax表单&lt;/title&gt; &lt;s:head theme="ajax" /&gt; &lt;/head&gt; &lt;body&gt; &lt;s:div id="mydiv"&gt;&lt;/s:div&gt; &lt;s:div&gt; &lt;s:form id="theForm2" action="AjaxTest" method="post" theme="ajax" validate="true"&gt; &lt;s:textfield name="name" label="请输入你的用户名" /&gt; &lt;s:password name="pass" label="请输入你的密码" /&gt; &lt;s:submit value="登录" targets="theForm2" loadingText="请稍后..." /&gt; &lt;/s:form&gt; &lt;/s:div&gt; &lt;/body&gt; &lt;/html&gt;
<pre></pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;AjaxResult.jsp:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt; &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;% request.setAttribute("decorator", "none"); response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 response.setHeader("Pragma","no-cache"); //HTTP 1.0 response.setDateHeader ("Expires", 0); //prevents caching at the proxy server %&gt; 你的姓名是:&lt;s:property value="name"/&gt;&lt;br&gt; 你的密码是:&lt;s:property value="pass"/&gt;
<pre></pre>
<span style="color: #000000;">
<p>&nbsp;&nbsp;&nbsp;<span style="color: #000000;">&nbsp;我在使用这个编辑器编辑这篇文章时不知道为什么有些符号或字母显示不正常了，弄了好半天了，大家也就凑合着看吧，呵呵！<span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">总的说来在struts2中使用ajax是非常方便，而且依靠DWR和DOJO这两个强大的AJAX框架，struts2 的ajax运用也会相当出色。随着struts渐渐淡出历史舞台，我想struts的王储－－－－struts2正在异军突起，彰显魅力！</span></span></span></span></p>
</span></span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://icanfly.javaeye.com/blog/191796#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 May 2008 22:06:36 +0800</pubDate>
        <link>http://icanfly.javaeye.com/blog/191796</link>
        <guid>http://icanfly.javaeye.com/blog/191796</guid>
      </item>
  </channel>
</rss>