页面加载时候就请求action和struts2通配符过滤(未迁入)

一、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>

index.jsp页面

<%@ 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数据,直接取得数据展示在当前页(避免了死循环)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值