TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
  
struts2把div元素与Ajax技术封装成div标签,submit标签,a标签等,方便开发者使用。div标签能够显示其他页面的内容,而这个页面的内容并不是用iframe等嵌套进来的。div标签能够用Ajax获取该页面的内容,然后在标签内部显示。div标签处处体现着Ajax技术的无页面刷新页面,即时相应等特点。 
本例将使用div标签显示新闻列表,用submit标签Ajax查询新闻列表。div标签显示URL/struts2/news.action 的内容,并且每隔5秒钟刷新一次,刷新时显示“正在刷新”等信息。另外添加了一个查询表单,用submit标签查询,查询结果直接显示到本页面上,代码如下: 
[color=#990066,strength=3);]div.jsp 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ taglib uri="/struts-tags" prefix="struts" %> 
<HTML> 
<struts:head theme="ajax" debug="false"/> 
  <body> 
   
<!-- 清空session的计数器 -->   
<struts:set name="clear" value="%{#session.updatedTimes = 0}"></struts:set> 
<!-- 要显示页面的 URL --> 
<struts:url id="news" action="divNews"></struts:url> 
<!-- indicator --> 
<span id="indicator" style="background:#FFF00;padding:4px"> 
   正在刷新<struts:property value="#news"/>... 
</span> 
<!-- div标签 显示一个页面 每隔5秒钟刷新一次 --> 
<struts:div theme="ajax" href="%{news}" showLoadingText="false" updateFreq="5000" indicator="indicator"> 
</struts:div> 
<!-- Ajax查询表单 --> 
<struts:form name="newsActionForm" id="newsActionForm" namespace="/"> 
   <struts:textfield name="key" label="关键字"></struts:textfield> 
   <struts:submit value="查询新闻" href="%{news}" formId="newsActionForm" theme="ajax" targets="divNewsSearch"></struts:submit> 
</struts:form> 
<!-- 查询结果显示在这里 --> 
<div id="divNewsSearch"></div> 
  </body> 
</html> 
注:struts2头,div标签都要使用Ajax主题。div标签的href指定要显示页面的URL,使用url标签定义。submit标签可以以post,get方式提交表单,也可以使用Ajax方式提交,使用Ajax的关键是要定义href属性(使用url标签),formId属性(提交哪个表单的数据)与targets属性(结果显示在哪里),并指定Ajax主题。formId必须与查询表单的name.id属性一致。新闻列表与查询新闻使用同一个Action,代码如下: 
DivNewAction.java 
package com.zhangjie.struts2.action; 
import java.util.ArrayList; 
import java.util.List; 
import org.apache.struts2.config.Result; 
import org.apache.struts2.config.Results; 
import com.opensymphony.xwork2.ActionSupport; 
@Results([email=value=%7B@Result(name=%22input%22,value=%22/divNews.jsp]value={@Result(name="input",value="/divNews.jsp[/email]")}) //零配置 
public class DivNewsAction extends ActionSupport { 
 private static String[] ALL_NEWS = { 
  "中国将举行2008年奥运会,开幕式日期2008年8月8日", 
  "继水立方后,又一奥运建筑鸟巢体育馆日前竣工", 
  "嫦娥探月卫星成功发射升空", 
  "神舟六号宇宙飞船胜利返航", 
  "中国A股股市超跌反弹", 
 }; 
  
 private String key; 
 private List<String> news = new ArrayList<String>();  //List对象 
  
 public String execute(){ 
  if(key == null) key = ""; //如果 key为null,设为空 
  for(String n :ALL_NEWS){  //遍历新闻标题 
   if(n.contains(key)){  //如果包含关键字 
    news.add(n);      //则显示 
   } 
  } 
  return INPUT; 
 } 
 public static String[] getALL_NEWS() { 
  return ALL_NEWS; 
 } 
 public static void setALL_NEWS(String[] all_news) { 
  ALL_NEWS = all_news; 
 } 
 public String getKey() { 
  return key; 
 } 
 public void setKey(String key) { 
  this.key = key; 
 } 
 public List<String> getNews() { 
  return news; 
 } 
 public void setNews(List<String> news) { 
  this.news = news; 
 } 
} 
效果如下: 
 
  
 |   
 
 
 
 |