一、A页面加载就请求action,可以在A之前定义一个B.jsp
比如login.jsp登陆页面action成功跳转到main.jsp首页可采用下面间接
Login成功后跳转到index.jsp,在index.jsp中写local.href来请求action,然后再跳到main.jsp
在使用action通配符时候,要进行过滤器,得在web.xml中加入
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> |
<%@ pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <scripttype="text/javascript"> location.href = "<%= basePath%>indexnari/indexMain_showIndexMain.action"; 请求时候过滤 </script> </html>
在showIndexMain中读取数据再跳转到main.jsp |
Struts2.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <include file="struts-default.xml" />
<package name="indexnari" extends="json-default" namespace="/indexnari"> <action name="indexMain_*" class="com.nari.npce.action.IndexMainAction" method="{1}"> 固定配置 <result name="success" >/page/main.jsp</result> <result name="top" >/page/top.jsp</result> <result name="buttom" >/page/buttom.jsp</result> </action> </package> </struts> |
Java中struts2剩余代码
package com.nari.npce.action;
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar;
import javax.servlet.http.HttpServletRequest;
import net.sf.json.JSONArray; import net.sf.json.JSONObject;
import org.apache.commons.logging.impl.Log4JLogger; import org.apache.struts2.ServletActionContext; import org.apache.struts2.interceptor.ServletRequestAware; import org.dom4j.DocumentException;
import com.nari.npce.log.NPECRunLog; import com.nari.npce.log.impl.NPECRunLogImpl; import com.nari.npce.service.GridService; import com.nari.npce.utils.PropertiesUtil; import com.nari.npce.utils.XmlUtils; import com.opensymphony.xwork2.ActionSupport;
public class IndexMainAction extends ActionSupport implements ServletRequestAware {
private static final long serialVersionUID = -7751391418230535378L;
private HttpServletRequest request;
/** * 日志类 */ private static final NPECRunLog LOGGER = new NPECRunLogImpl();
public String showIndexMain() { //String indexMainGridString = GridService.indexMainGrid(); //request.setAttribute("indexMainGridString", indexMainGridString);
String newJson = " [{'result':'2014-03-16','id':'国电南瑞智能电网集成应用平台关转移'},{'result':'2014-03-16','id':'国电南瑞智能电网集成应用平台关转移'},{'result':'2014-03-16','id':'国电南瑞智能电网集成应用平台关转移'}," + "{'result':'2014-03-16','id':'国电南瑞智能电网集成应用平台关转移'},{'result':'2014-03-16','id':'国电南瑞智能电网集成应用平台关转移'}" + "]"; request.setAttribute("newJson", newJson); JSONArray gdsNodes1 = new JSONArray(); JSONObject gdsNodeYear1 = new JSONObject(); //要区分线路图三个类别(总负荷,损耗量,损耗率) //String type =request.getParameter("type").toString(); //要区分取数据到底是按年、月、日 //String time =request.getParameter("time").toString(); gdsNodeYear1.put("key",getKeyAndData("day","zongfuhe").get("key")); gdsNodeYear1.put("data",getKeyAndData("day","zongfuhe").get("data"));
gdsNodeYear1.put("name", "总负荷"); gdsNodes1.add(gdsNodeYear1); String json1 = gdsNodes1.toString(); request.setAttribute("highchartsJson1", json1);
/ JSONArray gdsNodes2 = new JSONArray(); JSONObject gdsNodeYear2 = new JSONObject(); //要区分线路图三个类别(总负荷,损耗量,损耗率) //String type =request.getParameter("type").toString(); //要区分取数据到底是按年、月、日 // String time =request.getParameter("time").toString(); gdsNodeYear2.put("key",getKeyAndData("day","sunhaoliang").get("key")); gdsNodeYear2.put("data",getKeyAndData("day","sunhaoliang").get("data")); gdsNodeYear2.put("name", "损耗量"); gdsNodes2.add(gdsNodeYear2); String json2 = gdsNodes2.toString(); request.setAttribute("highchartsJson2", json2);
/ JSONArray gdsNodes3 = new JSONArray(); JSONObject gdsNodeYear3 = new JSONObject(); //要区分线路图三个类别(总负荷,损耗量,损耗率) // String type =request.getParameter("type").toString(); //要区分取数据到底是按年、月、日 // String time =request.getParameter("time").toString(); gdsNodeYear3.put("key",getKeyAndData("day","sunhaolv").get("key")); gdsNodeYear3.put("data",getKeyAndData("day","sunhaolv").get("data"));
gdsNodeYear3.put("name", "损耗率"); gdsNodes3.add(gdsNodeYear3); String json3 = gdsNodes3.toString(); request.setAttribute("highchartsJson3", json3); return SUCCESS; }
public String showIndexTop() { return "top"; }
public String showIndexButtom() { return "buttom"; }
@Override public void setServletRequest(HttpServletRequest request) { this.request = request; } //获取time方法 private JSONObject getKeyAndData(String time,String type){ JSONObject gdsNodeYear = new JSONObject();
//若是按年,那么横坐标是固定的12个月 if("year".equals(time)){ gdsNodeYear.put("key", "1#2#3#4#5#6#7#8#9#10#11#12"); //同时按类型设置对应的纵坐标数据 // gdsNodeYear.put("data", "7.0# 6.9#9.5#14.5#18.2#21.5#25.2#26.5#23.3#18.3#13.9#9.6");///代写 if("totalfuhe".equals(type)){ gdsNodeYear.put("data", "7.0# 6.9#9.5#14.5#18.2#21.5#25.2#26.5#23.3#18.3#13.9#9.6");
}else if("sunhaoliang".equals(type)){ gdsNodeYear.put("data", "10#11#12#13#14#15#16#17#18#19#20#21");
}else if("sunhaolv".equals(type)){ gdsNodeYear.put("data", "22#23#24#25#26#27#28#29#30#31#32#33");
}
}else if("month".equals(time)){ //按数据库返回或者java返回的当月天数来给定 GregorianCalendar gc=new GregorianCalendar(); Calendar cal = Calendar.getInstance(); cal.add(Calendar.MONTH, -1); //int month=cal.get(Calendar.MONTH);
int dayshu=cal.getActualMaximum(Calendar.DAY_OF_MONTH) ; System.out.print(dayshu); //设置横坐标的标点 StringBuffer sb=new StringBuffer(); for (int i=1;i<=dayshu;i++){//拼接#的字符串 //最后一个数值不用加# if(i==dayshu){ sb.append(i+"");
}else{
sb.append(i+"#");
}
} System.out.print(sb);//返回当月的的天数带#的字符串key gdsNodeYear.put("key", sb.toString()); //再去拼接传过来与横坐标对应的纵坐标的数值, //同时按类型设置对应的纵坐标数据 // gdsNodeYear.put("data", "");/代写 if("totalfuhe".equals(type)){ gdsNodeYear.put("data", "1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#1#2#3#4#5#6#7#8#9#10#11");
}else if("sunhaoliang".equals(type)){ gdsNodeYear.put("data", "1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#1#2#3#4#5#6#7#8#9#10#11");
}else if("sunhaolv".equals(type)){ gdsNodeYear.put("data", "1#2#3#4#5#6#7#8#9#10#11#12#13#14#15#16#17#18#19#20#1#2#3#4#5#6#7#8#9#10#11");
}
}else if("day".equals(time)){ ///按5分钟,15分钟,30分钟,60分钟设定横坐标值,由客户自己来定 gdsNodeYear.put("key", "1#2#3#4#5#6#7#8#9#10#11#12"); gdsNodeYear.put("data", "1#2#3#4#5#6#7#8#9#10#1#12");
}
return gdsNodeYear; }
}
|
二、用ajax进行局部刷新
在页面加载 比如 body onload 指定一个javascript方法,在那里使用jquery这种前台技术可以请求到action中,取得json数据传回,局部刷新页面。
这样的话是不会重新加载页面的,也就不会循环调用body onload里制定的ajax请求action。这样ajax自动得到数据来展现在当前页面上
三、注意点:千万不要在body onload 指定一个javascript方法,里面不通过action直接请求action,后来虽然action能write数据出来,前台不能直接拿到的,那么就需要跳转页面,那么在前台有得请求action,会进入死循环的。四、百度的网友建议,如上述让struts拦截.jsp请求,通过拦截器调用相应action然后再转到目标页面。 或者 在访问你那个页面之前再放一个空白页面用于发送action请求,取得数据后再跳转到目标页面,即在空白页面加入<meta http-equiv="refresh" content="0; url=xxxx.action" /> 由于跳转速度很快,基本上看不出来 总之,就是要想办法发送action请求以取得数据五:总结一下如果用户登录页面login.jsp到主页main.jsp要加载一些数据
1、涉及两个页面
login,jsp请求到login.action,在login.action里验证用户名和密码,setSession用于用户名。同时查询首页mian,jsp需要的数据,然后setAttrbute用于首页需要的数据。最后在login,action中跳转到main,jsp页面
2、涉及三个页面:login,jsp请求到login.action,在login.action里验证用户名和密码,setSession用于用户名跳转到index.jsp页面,在index.jsp页面请求main.action请求首页的数据 setAttribute,然后跳转到main,jsp
3、两个页面login,jsp请求到login.action,在login.action里验证用户名和密码,setSession用于用户名跳转到mian.jsp页面,然后通过onLoad方法中额ajax请求mian.jsp数据,直接取得数据展示在当前页(避免了死循环)