zoukankan      html  css  js  c++  java
  • Struts2标签与Jsp的嵌入Java代码之间的变量相互引用

      新年的第一天,对programer来说,和往常相比并没有太大不同,代码照样敲。做了一天键盘侠,不见得有什么出彩的成就(其实一直以来似乎都是这样/(ㄒoㄒ)/~~),倒是被曾经绊住的问题再次绊住然后纠结地解决了,顺便复习了一下。问题就是在Struts2标签和Jsp的Java代码直接实现了变量相互引用。

      情景1:有一个在valuestack里面有一个变量,而我们目标除了获得这个值之外,还可能会更改它的值,这个操作可能是通过webservice,service、dao等进行,而这些操作都要进行Java编码实现,这里为了简单起见,只是在Java代码里面或者这个变量,并且更改它的值。借用<s:set />标签以及Jsp的内置对象PageContext,具体如下:

      首先定义Action

    public class MyAction extends ActionSupport implements ServletRequestAware, ServletResponseAware {
    
        HttpServletRequest httpServletRequest;
    
        HttpServletResponse httpServletResponse;
    
      //定义在valueStack的变量 String valueInValueStack; //省略setter和getter
    public String execute() throws Exception { try {
            valueInValueStack
    = "default value in valueStack"; System.out.println("valueInValueStack = "+valueInValueStack); //输出:valueInValueStack = default value in valueStack return SUCCESS; } catch (Exception e) { e.printStackTrace(System.out); return ERROR; } } }

      在struts.xml里面配置该action

            <package name="test" extends="struts-default" namespace="/">
              //定义struts2的action MyAction
                    <action name="myAction" class="com.test.MyAction" method="execute">
                            <result name="success">/jsp/result.jsp</result>
                    </action>
            </package>

      定义MyAction的execute返回的页面result.js<%@ page contentType="text/html;charset=UTF-8" language="java" %<%@ taglib prefix="s" uri="/struts-tags" %<html>

    <head>
        <title></title>
    </head>
    <body>
        <p>
            原本处于valuestack里面的值:<s:property value="valueInValueStack"/>
         //使用<s:set/>来定义一个名称为newVariable的变量,并且它的值取自于valueStack <s:set var="newVariable" scope="page" value="valueInValueStack"/> </p> <%
         //在Jsp的内置对象pageContext取出该变量
         String s = (String)pageContext.getAttribute("newVariable"); out.println("内嵌Java代码的值:"+s); s = "this is the newVariable, whose value is changed from valueStack";     //操作完成后,再次把该变量放置在pageContext里面,名称保持不变。如果想在request或者session范围获取到该变量,就要放置到对应的范围内
    pageContext.setAttribute(
    "newVariable", s); %> <p>
       
          //通过ognl的attr来获取放置在pageContext的变量 更改后的值:<s:property value="%{#attr.newVariable}"/> </p> </body> </html>

      真实的result如下:

      在这过程中,起中转作用的是pageContext,pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。

    不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
  • 相关阅读:
    MTK Sensor越界导致的系统重启问题分析报告
    WebView兼容问题分析报告
    图片格式问题分析报告
    堆内存double free问题分析报告
    Virsualizer模块野指针问题分析报告
    libjohn hook问题分析报告
    [开发技巧]·Numpy广播机制的深入理解与应用
    [深度应用]·使用一维卷积神经网络处理时间序列数据
    [开发技巧]·Numpy中对axis的理解与应用
    [开发技巧]·HTML检测输入已完成自动填写下一个内容
  • 原文地址:https://www.cnblogs.com/lauyu/p/5100780.html
Copyright © 2011-2022 走看看