怎样拿到ValueStatck中的context的值

input_first.jsp
[code="java"]
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



Insert title here


input_fist.jsp

/s:textfield
/s:textfield
/s:submit
/s:form


[/code]

action:
[code="java"]
package com.struts2.action;

import com.struts2.model.Point;

public class ConvertTypeActionFirst {

private Point point ;

public Point getPoint() {
    return point;
}


public void setPoint(Point point) {
    this.point = point;
}



public String execute(){

System.out.println("..........converter type action first....");
//System.out.println("action point.x"+point.getX()+"action point.y"+point.getY());
return "success";
}

}

[/code]

output_first.jsp
[code="java"]
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">



Insert title here


Hello Point:

用户名:


[/code]

问题:在Struts2的执行流程的时候,会将request得请求参数放入到ValueStack的Context中,请问我怎样才能在输出页面output_first.jsp里获得context里的值呢,如程序中的userName

[size=medium][color=red]楼主,你这样做是不符合Struts2的逻辑的,页面请求的参数,提交给Action后,里面提供相应的set和get方法,在提交的时候,会从值栈中取出该属性,自动调用set方法,在从execute方法中返回success之前, 会自动调用get方法,将值放入值栈。[/color][/size]

[size=medium]而你,在提交表单的时候,里面有个userName属性名,可你Action中没有对应的set方法,那怎么能能给userName赋值呢[/size],[quote]用户名: [/quote]

[size=medium]而在返回页面中,你又这样写,那就会自动userName的get方法,可你Action中根本就没有这个方法,所以你的值栈中也没有其值。[/size]

[size=medium]就像你在提交页面中写的:[/size]
[quote]/s:textfield [/quote]

[size=medium]可你Action中根本就没有相应的setPointww()方法,当然就不会赋值了,而在你的返回页面中,[/size][quote]Hello Point:
[/quote]

[size=medium]名字又是pointww,Struts2会自动调用getPointww方法,也没有这个方法,所以你的返回页面中都没有对应属性的值,也就不会显示了[/size]

明白了吗,好像你这个问题提问过呀?

Struts2 将Action与Servlet分离,其实就是把Servlet中的大部分东西都搬到一个个map中,把所有的请求值,request, session, servletContext中的attribute都搬过去。而valueStack是其中一个(request),然后把valueStack 对象存放在request的属性中,用request.getAttribute( ServletActionContext.STRUTS_VALUESTACK_KEY); 就可以得到valueStack对象.

    ActionContext干嘛?ActionContext是方便客户端的action对各个map进行操作而提供的一个门面.,调用ActionContext.getContext 就可以获取当前的ActionContext,它是用ThreadLocal来实现的。

LZ的意思是 input输入的两个字段pointww和userName 要在output中显示吧。

按照LZ的编码是显示不了的,因为input--->action已经是一次请求,如果action中不能拿到pointww和userName的话,那么action--->output中的request是没有pointww和userName值的,LZ无论从哪里都拿不到,首先LZ要明白这两个字段的作用域。

这种情况下,LZ需要在Action中定义pointww和userName的属性以及get/set,这样input--->action,Struts2就可以把这两个字段填充到action中,而在action--->output中,Struts2会把action放在context根,所以直接按照属性获取就可以了。

Action改动如下:

String pointww;
getPointww();
setPointww(String pointww)
String userName;
getUserName();
setUserName(String userName)

out.jsp改动如下:


你的这段代码应该是会抛异常的 ,action缺少属性的set 方法

action中应提供pointww和userName的getter和setter

在返回jsp页面中直接就可以取到值了