struts2怎么实现页面到页面之间的传值?
我要实现一个产品订购的功能,在浏览产品的时候通过点击一个订购的链接,跳转到提交订单的页面,在跳转的同时要把浏览的产品的名称和型号传到提交订单的页面,并且把这里的订单类的产品名称和型号的表单域里赋上传递过来的值,因为只用到两个值,不想通过Action去操作,只涉及页面之间的值传递。。。
我是这样做的:
在浏览产品页面有:<a href='<s:url value="orderList_add.jsp" >
<s:param name="productName" value="%{product.productName}" />
<s:param name="typeNum" value="%{product.typeNum}" /></s:url>'>
[订购]
</a>
这里通过param把产品名称和型号传递到orderList_add.jsp页面,在orderList_add.jsp页面我用request.getParameter("typeNum")可以得到值,(虽然传递过来的中文会乱码),但却不知道怎么赋到表单域里,查资料知道Struts2的#request['typeNum']或#request.typeNum可以得到request里面的值,但用<s:property value="#request['typeNum']"/>却输不出request里的值,郁闷好几天不知怎么搞,希望大家指点下!!
问题补充:
不行,报异常!而且我还要把值赋到一个表单域里,如:<s:textfield name="productName" value=""/>,问题是怎么把值赋进来????
问题补充:
报org.apache.jasper.JasperException:/pages/orderList/orderList_right_add.jsp(34,4) According to TLD or attribute directive in tag file, attribute value does not accept any expressions
和java.lang.ClassNotFoundException异常……
问题补充:
out试过了,直接输出到页面是没问题的,但放到<s:textfield name="productName" value="<% out.print('productName')%>"/> 就不行了,value解析不出productName的值,直接把<% out.print('productName')%>输出来了。。。
问题补充:
写成
<s:textfield name="productName" value="<%=productName%>"/>
应该可以吧
结果是一样的!
谢谢指出!
难道真得用action实现啊?我再试试……
问题补充:
不想用Action是因为这里涉及的参数就两个,而且product和orderlist是两个不同的Action,在里面传来传去嫌麻烦,也是为涂省事吧,呵呵,可现在好像并不太省事……
至于用JavaScript的方法填充表单,本人没用过,能具体到代码吗?谢谢啦!!
问题补充:
js的方法我是这么做的:
<%
String proNum = request.getParameter("typeNum");
String proName = request.getParameter("productName");
out.print(proNum+"-----"+proName); %>
<script type="text/javascript">
window.onload = function (){
var parm1 = document.getElementById("proName")
parm1.value = ${proName};
var parm2 = document.getElementById("proNum")
parm2.value = ${proNum};
}
</script>
<s:textfield name="productName" id="proName"/>
<s:textfield name="orderList.typeNum" id="proNum"/>
可表单域里怎么就是没有值啊!而且在页面上用${proNum}也没值,但上面的out.print(proNum+"-----"+proName);却能输出值,这是怎么回事????
问题补充:
这样的也试过了,就是在页面用<%=pramValue%>或${pramValue}也输入出值……
不过现在问题还是解决了,还是通过jsp页面-action-jsp页面的方式把值放到request里,在最后的jsp页面用<s:textfield name="orderList.productName" value="%{#request['product.productName']}" />的方式把值最终传过来并赋到了表单的输入域里,还是这位大哥的
提醒了我,谢谢啦!不知能否留个QQ之类的,以后有问题好请教下,呵呵……
不过问题是解决了,但跟我最初的jsp页面-jsp页面传值的想法不一样,小有遗憾。。。。。在Struts里是不是根本就没有这样直接传值的方法啊???不知有没有更好的方法。。。。
问题补充:
嗯,这种才应该是Struts2提供的页面到页面传递的方法,也是我想要的,只是这种方法传递中文的时候会乱码不知怎么解决呢。。。
采纳的答案
使用 #parameters.productName,而不是 #request.productName, 完整代码如下:
浏览产品页面:
- <%@page contentType="text/html;charset=UTF-8" %>
- <%@taglib uri="/struts-tags" prefix="s"%>
- <a href='<s:url value="orderList_add.jsp" >
- <s:param name="productName" value="'a'" />
- <s:param name="typeNum" value="20" /></s:url>'>
- [订购]
- </a>
提交订单页面:
- <%@page contentType="text/html;charset=UTF-8" %>
- <%@taglib uri="/struts-tags" prefix="s"%>
- <s:textfield name="productName" value="%{#parameters.productName}"/>