关于用struts2框架中iframe对应的jsp页面的不到action的值的问题
我们做web项目经常会用到frameset、frame以及iframe,这大大方便了我们页面的构建以及模块功能的划分。
但是,再使用这些技术的同时也会遇到各种各样的问题,其中一个就是子页面中得不到struts2的action的值。
之前自己在做项目的时候也遇到了这个问题。
在网上查阅了大量的资料,现将自己的总结与结论与大家一起分享。
frameset、frame经实践是没有问题的,如果因为种种原因也出现的话,那么请参考iframe。
现在具体讨论一下iframe的问题:
首先要明确一下出现这个问题的原因,那就是:action的ValueStack、Stack Context能够做到达的范围(我暂时称它为action的作用域,不一定准确,但是便于理解)
只到result跳转到的第一个jsp页面,也就是说当前action的值仅在此jsp页面可以使用,其他的页面是不可以的(其他jsp得到的值是其他action的值)。
要解决iframe的问题,上面句话必须要理解。
下面来看一下iframe的用法:
<iframe src = "***.jsp" />
可以看到,iframe的src恰恰对应的是另外的jsp页面,因此这个jsp页面是无法得到的(如果没有其他的action直接跳转的该jsp页面的话)。
那么怎么解决这个问题呢,
<iframe src = "***.action" />
不是换后缀名,而是让iframe的src指向一个action,action对应的方法完成相应的增删查改操作,最后返回一个页面,那么这个页面就在此iframe中使用了
为便于家理解,下面粘贴一个例子,供大家参考:
mainFrame.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<iframe name="A" src = "Blog_list" /><!-- Blog_list:BlogAction.java 的list方法 -->
<iframe name="B" src = "Blog_menu" /><!-- Blog_menu:BlogAction.java 的menu方法 -->
</body>
</html>
struts.xml
<package name="front" namespace="/" extends="struts-default">
<!-- 第一个*代表你用的哪个action,第二*个是你用的哪个方法 -->
<action name="*_*" class="com.blog.action.{1}Action" method="{2}">
<result name="menu">/menu.jsp</result>
<result name="list">/list.jsp</result>
</action>
</package>
BlogAction.java
public String menu(){
menus = blogService.getMenu();
return "menu";
}
public String list(){
blogs = blogService.getList();
return "list";
}
menu.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<s:iterator value="menus">
<s:property value="menu">
</s:iterator>
</body>
</html>
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<s:iterator value="blogs">
<s:property value="title">
</s:iterator>
</body>
</html>
如果弄清楚了就是这样简单,但是对于习惯传统写法的这里有个问题,那就是以前都是同一查询,然后在页面里统一显示
BlogActon.java
public String list(){
menus = blogService.getMenu();
blogs = blogService.getList();
return "success";
}
blog.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<s:iterator value="menus">
<s:property value="menu">
</s:iterator>
<s:iterator value="blogs">
<s:property value="title">
</s:iterator>
</body>
</html>
但现在却是:由大化小,由繁化简,朝着一个action的方法解决一个功能方向前进,但是这也正是我们需要的。
鉴于本人技术有限只能分析到此,如有什么问题希望大家指正。
分享到:
相关推荐
Struts2资源文件在jsp页面中显示乱码解决
Struts2 框架中,Action 组件可以通过多种方式接收参数,这些方式包括使用 Action 的属性、使用 DomainModel 和使用 ModelDriven。下面将详细介绍这些方法: 使用 Action 的属性接收参数 在 Struts2 中,可以使用 ...
3.控制器采用action开发,替代传统的servlet,直接跳转页面返回一个字符串即可,需配置struts.xml对应的jsp。 4.struts2,可以直接对表单提交的数据封装成对象,简洁!当然需要在web.xml中配置核心filter—...
Struts2的框架及注释和使用法,希望大家支持,我们一起努力,谢谢!
利用Struts 2标签创建ex3.jsp页面,此页面提交给tag.action,在structs.xml中配置这个action的转发视图为result.jsp在result.jsp页面中显示ex3.jsp页面控件的值。(源代码和实验报告)
对于小型Web应用,一般采用JSP接收浏览器请求,执行操作后返回结果页面。JSP页面控制整个应用的运行。这种以JSP页面为中心的设计模式称为模型1
具体要求是在loginAction类中分别用login()和registered()处理用户登录和注册的过程,分别创建login.jsp和register.jsp两个页面实现登录和注册的输入,这两个页面提交给loginAction中的两个方法进行业务处理,...
Struts2 工作原理 Struts2框架 有图
struts2中action如何获取jsp页面参数1.rar
struts2中action如何获取jsp页面参数1.pdf
struts2 中action 如何获取jsp 页面参数1.pdf
struts2的配置文件和代码,便于以后忘记struts2框架的时候查看
Struts2框架
jsp通过Ajax无刷新获取Action返回的模拟数据,然后通过struts2转化成json数据返回页面....这里面Map,List,对象等等,一些常用的操作都有。主要的代码在Action和 json.js里面。适合新手入门
web.xml 文件主要是配置 Struts 的过滤器,使整个 Web 的流程转入到 Struts 框架中,而 struts.xml 是 Struts 框架的核心配置文件,在项目开发过程中,需要在此文件中进行大量的配置。 二、Struts2 框架所需要的两...
struts2的框架源代码,想学习struts2的人应该了解一下,面试会问到底层的东西
采用Struts2框架,完成数据库操作(增删改查),完成分页,模糊查询,