日期:2014-05-16  浏览次数:20704 次

Struts2中使用Ajax
本文主要看一下Struts2中的Div是如何用来输出Ajax结果。

首先,我们先创建一个简单的用例,在这个用例中,将在屏幕上显示一个用户列表,点击列表中的userid时,列表的下方将显示用户的详细信息,显示用户详细信息的这个步骤我们将使用Ajax。


一、创建web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
  <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
  </filter> 
  <filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
  </filter-mapping> 
</web-app> 



二、创建struts.xml
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <package name="ajaxdemo" extends="struts-default"> 
        <action name="UserListingAction" class="ajaxdemo.action.UserListingAction"> 
            <result>/userlisting.jsp</result> 
        </action> 
        <action name="UserDetailAction" class="ajaxdemo.action.UserDetailAction"> 
            <result>/userdetail.jsp</result> 
        </action> 
    </package> 
</struts> 


三、页面:userlisting.jsp
Displays list of users
<%@ taglib prefix="s" uri="/struts-tags" %> 
<html> 
  <head> 
    <s:head theme="ajax"/> 
    
  </head> 
  <script> 
    function show_user_details(id) { 
      document.frm_user.userid.value = id; 
      dojo.event.topic.publish("show_detail"); 
    } 
  </script> 
  <body> 
    <s:form id="frm_user" name="frm_user"> 
      <h1>User Listing</h1> 
      <s:if test="userList.size > 0"> 
        <table border="1"> 
          <s:iterator value="userList"> 
            <tr> 
              <td> 
                <s:a href="#" onclick="javascript:show_user_details('%{id}');return false;"><s:property value="id" /></s:a> 
              </td> 
              <td> 
                <s:property value="name" /> 
              </td> 
            </tr> 
          </s:iterator> 
        </table> 
      </s:if> 
      <s:hidden name="userid"/> 
      <s:url id="d_url" action="UserDetailAction" /> 
      <s:div  id="user_details" href="%{d_url}" theme="ajax" listenTopics="show_detail" formId="frm_user" > 
      </s:div> 
    </s:form> 
  </body> 
</html> 


四、页面:userdetail.jsp,用于显示用户详细信息,由userlisting.jsp加载
<%@ taglib prefix="s" uri="/struts-tags" %> 
<h1>User Details</h1> 
<s:if test="userDetails != null"> 
    <table> 
      <tr><td>Id:</td><td><s:property value="userDetails.id" /></td></tr> 
      <tr><td>Name:</td><td><s:property value="userDetails.name" /></td></tr> 
      <tr><td>Email:</td><td><s:property value="userDetails.email" /></td></tr> 
      <tr><td>Address:</td><td><s:property value="userDetails.address" /></td></tr> 
    </table> 
</s:if> 


五、ajaxdemo.action.UserListingAction.java,生成用户列表数据,交由userlisting.jsp显示,在实际的应用中,这部分的数据一般是从数据库中取得的。

package ajaxdemo.action; 

import ajaxdemo.dto.UserListDTO; 
import com.opensymphony.xwork2.ActionSupport; 
import java.util.ArrayList; 
import j