struts2怎么实现页面到页面之间的传值?

我要实现一个产品订购的功能,在浏览产品的时候通过点击一个订购的链接,跳转到提交订单的页面,在跳转的同时要把浏览的产品的名称和型号传到提交订单的页面,并且把这里的订单类的产品名称和型号的表单域里赋上传递过来的值,因为只用到两个值,不想通过Action去操作,只涉及页面之间的值传递。。。
我是这样做的:
在浏览产品页面有:却输不出request里的值,郁闷好几天不知怎么搞,希望大家指点下!!

[b]问题补充:[/b]
不行,报异常!而且我还要把值赋到一个表单域里,如:,问题是怎么把值赋进来????
[b]问题补充:[/b]
报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异常……
[b]问题补充:[/b]
out试过了,直接输出到页面是没问题的,但放到 window.onload = function (){ var parm1 = document.getElementById("proName") parm1.value = ${proName}; var parm2 = document.getElementById("proNum") parm2.value = ${proNum}; }


可表单域里怎么就是没有值啊!而且在页面上用${proNum}也没值,但上面的out.print(proNum+"-----"+proName);却能输出值,这是怎么回事????

[b]问题补充:[/b]
[quote]换成 parm.value = "<%=pramValue%>"试看[/quote]这样的也试过了,就是在页面用<%=pramValue%>或${pramValue}也输入出值……
不过现在问题还是解决了,还是通过jsp页面-action-jsp页面的方式把值放到request里,在最后的jsp页面用的方式把值最终传过来并赋到了表单的输入域里,还是这位大哥的[quote]是OGNL的表示形式 需要经过action来操控的吧 [/quote]提醒了我,谢谢啦!不知能否留个QQ之类的,以后有问题好请教下,呵呵……

不过问题是解决了,但跟我最初的jsp页面-jsp页面传值的想法不一样,小有遗憾。。。。。在Struts里是不是根本就没有这样直接传值的方法啊???不知有没有更好的方法。。。。

[b]问题补充:[/b]
[quote] [/quote]
嗯,这种才应该是Struts2提供的页面到页面传递的方法,也是我想要的,只是这种方法传递中文的时候会乱码不知怎么解决呢。。。

使用 #parameters.productName,而不是 #request.productName, 完整代码如下:

浏览产品页面:
[code="java"]
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib uri="/struts-tags" prefix="s"%>

/s:url'>
[订购]

[/code]

提交订单页面:
[code="java"]
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib uri="/struts-tags" prefix="s"%>

[/code]

用out吧.

[code="java"]在浏览产品页面有:
[/b]
改用action形式 肯定是可以的

至于你想用jsp带参数过去
在页面加载完成后
执行
[code="js"]
window.onload = function() {
//吧你页面上通过getParameter得到的值
// 用js的形式填充到表单域
.....
}
[/code]

就可以了啊
至于 [quote]查资料知道Struts2的#request['typeNum']或#request.typeNum可以得到request里面的值[/quote]
是OGNL的表示形式 需要经过action来操控的吧

既然不想用action,为什么要用struct的标签啊,你可以选择用


/jsp:forward
的方式,或者直接
做啊,有乱码问题的

如果需要获取页面上的输入内容,用js获取,然后通过JavaScript语句转跳页面就好了,但这里会有浏览器兼容性的问题,语句不一定,当然也有乱码问题

上面说到的提取参数问题,其实直接看地址栏那里有没有参数就好了(参数暴露的问题),没有就传递的页面代码写错了。

用struts的action就不用自己去处理乱码,而且随着业务的开展,功能增多,
需要传递处理的参数肯定越多,还不如用action

js填充方式

你得在该jsp页面
[code="jsp"]
<%
String paramValue = request.getParameter("param");
%>
[/code]

[code="js"]
window.onload = function (){
var _parm = document.getElementById("param")
parm.value = ${paramValue };
}
[/code]

jsp页面包含
[code="jsp"]

[/code]

简单的写了些 具体思路就是这样

换成 parm.value = "<%=pramValue%>"试看

[quote]js的方法我是这么做的:
<%
String proNum = request.getParameter("typeNum");
String proName = request.getParameter("productName");
out.print(proNum+"-----"+proName); %>

window.onload = function (){ var parm1 = document.getElementById("proName") parm1.value = ${proName}; var parm2 = document.getElementById("proNum") parm2.value = ${proNum}; }


可表单域里怎么就是没有值啊!而且在页面上用${proNum}也没值,但上面的out.print(proNum+"-----"+proName);却能输出值,这是怎么回事???? [/quote]

根本问题是值没有传到客户端,
<%
String proNum = request.getParameter("typeNum");
String proName = request.getParameter("productName");
out.print(proNum+"-----"+proName); %>
这是服务端代码,你把值打印出来可以,但是要在页面中用&{}取得值需要
requset.setAttribute("proNum",proNum);
requset.setAttribute("proName",proName);
这样&{proNum},页面上应该会有值得了

然后如果想通过js代码获得这些值,需要通过异步Get操作,获得封装了这两个变量的json值,比较复杂,不推荐

var parm1 = document.getElementById("proName")
[b] parm1.value = ${proName};[/b]
var parm2 = document.getElementById("proNum")
[b] parm2.value = ${proNum}; [/b]

改成 :parm1.value = <%=proName%>
parm2.value = <%=proNum%>

可以这样,先把request.getParameter("")得到的值设置到request.setAttribute("",""),然后使用OGNL就可以了

首先在Action里面存值:
/**
这是在一个pojo类里,类名为(加了包名):org.zsl.action.InfoAction
*/
//定义一个保存要传值的变量
private String info;
//该变量的get和set方法
public void setInfo(String info) {
this.info = info;
}
public String getInfo() {
return info;
}
//Action
public String showInfo() {
info="所要传的值";
ActionContext.getContext().put("info", info);
return Action.SUCCESS;
}

/**
这是struts.xml的配置文件
*/

/WEB-INF/index.jsp

/**
这是在WEB-INF下的index.jsp页面
*/



<!-- 这是一种显示方式:ER表达式 -->
%{info}
<!-- 另一种显示方式用struts标签 -->


struts2.0还没有用过 不过我想页面应该没什么变化
你用el表达式 试一下
${requestScope.值} 这是request范围的
${sessionScope.值} 这是session范围的

可以参考下这里的介绍:
http://jzgl-javaeye.iteye.com/blog/372349

页面到页面间不可直接传值,抛开服务器不说,有以下办法:
1.将传递参数放到url后面。再将url使用正则表达式进行解析,分析出需要的参数,有点麻烦,如果参数不多,可以试下。
2.将需要传递的参数放到cookie中去,没什么好说的。
。。。
FF中貌似有作用于浏览器的全局变量,不过至少IE中没有。。


直接用EL表达式就可以了

在 EL 中则可以使用 param 和 paramValues 两者来取得数据。

${param.name}
${paramValues.name}

这里 param 的功能和 request.getParameter(String name)相同,而 paramValues 和
request.getParameterValues(String name)相同。如果用户填了一个表格,表格名称为
username,则我们就可以使用${param.username}来取得用户填入的值。

可以这样做 我发个例子看看能不能有所帮助

save.jsp 注册页面
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


Save User


Save User



/s:textfield
/s:textfield
/s:textfield

/s:submit

/s:form


list.jsp显示页面

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">



My JSP 'list.jsp' starting page
<script type="text/javascript">
function del()
{
    if(confirm("你真的要删除这行数据么?"))
    {
       return true;

    }
    return false;


}

</script>


Users List

<table border="1" width="30%">
<tr>
<td>id</td>
<td>firstname</td>
<td>lastname</td>
<td>age</td>
<td>删除</td>
<td>更新</td>   
</tr>    


<s:iterator value="#request.list" id="us">
<tr>
<td><s:property value="#us.id"></s:property></td>
<td><s:property value="#us.firstname"></s:property></td>
<td><s:property value="#us.lastname"></s:property></td>
<td><s:property value="#us.age"></s:property></td>
<td><s:a href="deleteUser.action?user.id=%{#us.id}" onclick="return del();">delete</s:a></td>
<td><s:a href="updatePUser.action?user.id=%{#us.id}">update</s:a></td>


</tr>

</s:iterator>

</table>
<s:a href="index.jsp">Homepage</s:a><br><br>
<s:a href="generateExcel.action">生成excel</s:a>


//action

package com.test.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.test.service.UserService;

public class ListUserAction extends ActionSupport {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private UserService service;

public UserService getService() {
    return service;
}

public void setService(UserService service) {
    this.service = service;
}

@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {

    Map request=(Map)ActionContext.getContext().get("request");
    request.put("list", service.findAll());

    return "success";
}

}

看看,顺便测试空格!