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对象可以通过访问这个对象的属性来导出。

    不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
  • 相关阅读:
    PNG文件格式具体解释
    opencv2对读书笔记——使用均值漂移算法查找物体
    Jackson的Json转换
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 单词接龙
  • 原文地址:https://www.cnblogs.com/lauyu/p/5100780.html
Copyright © 2011-2022 走看看