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;
}
}
效果如下:
|
|