Struts2跳转带参数问题
2016-05-22 13:23
513 查看
从list.jsp点击“回复”超链接跳转到reply.jsp 传值问题:
list.jsp页面传值id:<a href="reply.jsp?id=<s:property value="id" />">回复</a>
reply.jsp页面接收id:<%=request.getParameter("id") %>
普通链接
Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp。
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Welcome</title>
<link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"
type="text/css"/>
</head>
<body>
<h3>Commands</h3>
<ul>
<li><a href="<s:url action="Login_input"/>">Sign On</a></li>
<li><a href="<s:url action="Register"/>">Register</a></li>
</ul>
</body>
</html>
1.1说明
1.<%@ taglib prefix="s" uri="/struts-tags" %>
此句表示导入struts标签,并以s为前缀。即以s为前缀的标签均来自struts标签库。
2.<link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet" type="text/css"/>
此句表示利用url标签导入一个路径,链接到一个文件,注意此路径为项目下的绝对路径。
3.<a href="<s:url action="Login_input"/>">Sign On</a>
此句表示利用url标签链接到一个action。
1.2注册action
我们在struts.xml中注册一个action来显示welcome.jsp。
<action name="Welcome">
<result>/example/Welcome.jsp</result>
</action>
注意此action注册在package example下,所以在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/Welcome.action(StrutsHelloWorld是project名),会导向到Welcome.jsp。
2.使用通配符
对于上面的action注册,我们也可以用下面的语句代替。
<action name="*">
<result>/example/{1}.jsp</result>
</action>
此句的意思是,如果在没有找到匹配的action名称的情况下,默认调用action名称.jsp。第一句中星号指任意,而第二句中{1}指代第一句中星号指代的内容。
举个例子,如果在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/1.action,则系统查找struts.xml,发现没有name为1的action,即最后调用name为星号的这个action,根据此action,将输出/example/1.jsp。
或者读者可以直接点击Welcome.jsp中的两个超链接,系统将会报错找不到Login_input.jsp和Register.jsp。因为这两个action还没有注册,也没有相应的jsp文件。
3.带参数的链接
超链接后面带有参数大家不会陌生,诸如http://www.apache.com/?language=ch。这个链接后面带有一个language参数,其值为ch。你可以通过request.getParameter(“language”)找到参数值。下面演示在struts2中如何设置带参数的链接。看HelloWorld.jsp。
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
<h3>Languages</h3>
<ul>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%{url}">English</s:a>
</li>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">es</s:param>
</s:url>
<s:a href="%{url}">Espanol</s:a>
</li>
</ul>
</body>
</html>
3.1说明
1.<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
此段表示设置一个url标签指向名为HelloWorld的action,此标签带一个id取名为url,后面会用到。带一个参数request_locale,其值为en。
2.<s:a href="%{url}">English</s:a>
此句用到了struts2的超链接标签,连接的地址即为1中url,点击English,发出的信息为:http://localhost:8080/StrutsHelloWorld/example/HelloWorld.action?request_locale=en
3.2注册action到struts.xml
<struts>
<package name="example" namespace="/example"
extends="struts-default">
<action name="HelloWorld" >
<result>/example/HelloWorld.jsp</result>
</action>
----------------------------------------------------------------------------------------------------------
2012-12-10
17:27
提问者采纳
追问:
追答:
list.jsp页面传值id:<a href="reply.jsp?id=<s:property value="id" />">回复</a>
reply.jsp页面接收id:<%=request.getParameter("id") %>
普通链接
Web程序中最普通的应用是链接到其他页面,下面看Welcome.jsp。
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Welcome</title>
<link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet"
type="text/css"/>
</head>
<body>
<h3>Commands</h3>
<ul>
<li><a href="<s:url action="Login_input"/>">Sign On</a></li>
<li><a href="<s:url action="Register"/>">Register</a></li>
</ul>
</body>
</html>
1.1说明
1.<%@ taglib prefix="s" uri="/struts-tags" %>
此句表示导入struts标签,并以s为前缀。即以s为前缀的标签均来自struts标签库。
2.<link href="<s:url value="/css/tutorial.css"/>" rel="stylesheet" type="text/css"/>
此句表示利用url标签导入一个路径,链接到一个文件,注意此路径为项目下的绝对路径。
3.<a href="<s:url action="Login_input"/>">Sign On</a>
此句表示利用url标签链接到一个action。
1.2注册action
我们在struts.xml中注册一个action来显示welcome.jsp。
<action name="Welcome">
<result>/example/Welcome.jsp</result>
</action>
注意此action注册在package example下,所以在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/Welcome.action(StrutsHelloWorld是project名),会导向到Welcome.jsp。
2.使用通配符
对于上面的action注册,我们也可以用下面的语句代替。
<action name="*">
<result>/example/{1}.jsp</result>
</action>
此句的意思是,如果在没有找到匹配的action名称的情况下,默认调用action名称.jsp。第一句中星号指任意,而第二句中{1}指代第一句中星号指代的内容。
举个例子,如果在地址栏中敲入http://localhost:8080/StrutsHelloWorld/example/1.action,则系统查找struts.xml,发现没有name为1的action,即最后调用name为星号的这个action,根据此action,将输出/example/1.jsp。
或者读者可以直接点击Welcome.jsp中的两个超链接,系统将会报错找不到Login_input.jsp和Register.jsp。因为这两个action还没有注册,也没有相应的jsp文件。
3.带参数的链接
超链接后面带有参数大家不会陌生,诸如http://www.apache.com/?language=ch。这个链接后面带有一个language参数,其值为ch。你可以通过request.getParameter(“language”)找到参数值。下面演示在struts2中如何设置带参数的链接。看HelloWorld.jsp。
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World!</title>
</head>
<body>
<h2><s:property value="message" /></h2>
<h3>Languages</h3>
<ul>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
<s:a href="%{url}">English</s:a>
</li>
<li>
<s:url id="url" action="HelloWorld">
<s:param name="request_locale">es</s:param>
</s:url>
<s:a href="%{url}">Espanol</s:a>
</li>
</ul>
</body>
</html>
3.1说明
1.<s:url id="url" action="HelloWorld">
<s:param name="request_locale">en</s:param>
</s:url>
此段表示设置一个url标签指向名为HelloWorld的action,此标签带一个id取名为url,后面会用到。带一个参数request_locale,其值为en。
2.<s:a href="%{url}">English</s:a>
此句用到了struts2的超链接标签,连接的地址即为1中url,点击English,发出的信息为:http://localhost:8080/StrutsHelloWorld/example/HelloWorld.action?request_locale=en
3.2注册action到struts.xml
<struts>
<package name="example" namespace="/example"
extends="struts-default">
<action name="HelloWorld" >
<result>/example/HelloWorld.jsp</result>
</action>
----------------------------------------------------------------------------------------------------------
<s:iterator value="#request.list"> <s:set var="i" value="id"></s:set> <s:url action="xiangxi" id="test"> <s:param name="uuid" value="#i"/> </s:url> <tr> <td align="center"><s:a href="%{test}"><s:property value="title"/></s:a></td> <td align="center"><s:property value="issue_time"/></td> <td align="center">修改</td> <td align="center">删除</td> </tr> </s:iterator> 上面的代码是循环输出一个list ,list里面放的是新闻对象,该对象有ID,标题,内容,来源,发布时间这写属性, 并对第一个输出(就是标题)设置超链接,点击标题就可以跳转到详细的新闻页面,我不知道该怎么在action中获取页面中传过来的ID值,得不到ID值,我就没办法根据ID到数据库中去寻找
2012-12-10
17:27
提问者采纳
requet是map对象还是request对象或者是KEY指?list是放在requet中的么?xiangxi是action名? 修改,删除不需要id? 楼主给的信息比较少哦!! 如果是的话就这样写吧: <s:iterator value="#list"> <tr> <td align="center"> <s:a href="xiangxi.action?id=<s:property value="id"/>> <s:property value="title"/> </s:a> </td> <td align="center">修改</td> <td align="center">删除</td> </tr> </s:iterator>
追问:
Query query = session.createQuery("from News_bean"); List<News_bean> list = query.list(); HttpServletRequest req = ServletActionContext.getRequest(); req.setAttribute("list", list); return "cx_come"; 这是上面那个页面的action代码,这个action执行完后就跳转到上面那个页面,xiangxi是action名 <s:a href="xiangxi.action?id=<s:property value="id"/>> 我怎么得到那个id值?
追答:
OK,这下就好了撒,这样来: <s:iterator value="#request.list"> <tr> <td align="center"> <s:a href="获取详情的action?id=<s:property value=“这里放News_bean的id属性”/>”> <s:property value=“这里放News_bean得title属性”/> </s:a> </td> <td align="center">修改</td> <td align="center">删除</td> </tr> </s:iterator> 这样就OK了,然后你在 获取详情的action里面声明一个变量 id设置它的get和set方法就可以了,你点击超链接的时候 就直接用id就可以了,自动的,要不你在查询详情的action中打印一下id就知道了,呵呵,还有用session也可以的,我习惯用session
相关文章推荐
- JAVA基础之多态
- 将别处的web project 导入 eclipse 以后,为什么run as里 没有 run on server 选项
- MyEclipse中文乱码问题
- JAVA基础之进制转换,查表法的应用
- java.lang.ClassCastException: org.ksoap2.SoapFault
- JAVA基础之数组
- Struts2 HelloWorld!
- JAVA基础之函数
- Convention 插件(2)—— Annotation
- JAVA基础之其他流程控制语句:循环嵌套
- Java核心技术体系
- JAVA基础之流程控制语句:循环结构
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
- JAVA基础之流程语句控制:选择结构
- fastdfs-client-java工具类封装
- JAVA基础之程序流程控制:判断结构
- JAVA基础之运算符
- eclipse编辑器常用快捷键
- MyEclipse无法启动(闪退)的一种解决