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

    不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
  • 相关阅读:
    Python_字典
    Python_字符串方法
    跳转到新页面,加载过程中加入等待过渡的动态效果
    web项目引入第三方jar包,编译时找不到的问题与及解决方案
    Eclipse的debug按钮介绍
    什么是TCP粘包?怎么解决TCP粘包问题?UDP协议存在粘包问题吗?
    使用Java编写TCP协议发送和接收数据接口
    UUID生成唯一的16位随机数
    如何在父页面中操作/获取iframe页面中的元素?这个小问题折腾了我快半个小时,所以记下来吧!
    如何接收APP的请求,并且如何以json字符串的格式封装响应的数据,然后发送回APP
  • 原文地址:https://www.cnblogs.com/lauyu/p/5100780.html
Copyright © 2020-2023  润新知