解决方案 »

  1.   

    这个是struts OGNL表达式的问题,楼主可以自己搜一搜ognl的一些文档和博客,来帮助自己理解区分开#$%的区别吧。
    http://developer.51cto.com/art/201203/322509.htm
      

  2.   

    查看源码里jsp页面的内置对象已经被struts2给装饰了,
    你使用el表达式,会先去值栈中查找,找不到再去request中找    public HttpServletRequest wrapRequest(HttpServletRequest request, ServletContext servletContext) throws IOException {
            // don't wrap more than once
            if (request instanceof StrutsRequestWrapper) {
                return request;
            }        String content_type = request.getContentType();
            if (content_type != null && content_type.contains("multipart/form-data")) {
                MultiPartRequest mpr = null;
                //check for alternate implementations of MultiPartRequest
                Set<String> multiNames = getContainer().getInstanceNames(MultiPartRequest.class);
                if (multiNames != null) {
                    for (String multiName : multiNames) {
                        if (multiName.equals(multipartHandlerName)) {
                            mpr = getContainer().getInstance(MultiPartRequest.class, multiName);
                        }
                    }
                }
                if (mpr == null ) {
                    mpr = getContainer().getInstance(MultiPartRequest.class);
                }
                request = new MultiPartRequestWrapper(mpr, request, getSaveDir(servletContext));
            } else {
                request = new StrutsRequestWrapper(request);
            }        return request;
        }
      

  3.   

    恩恩,看来就是这样了,能够取值栈,虽然我没有看懂代码
    值栈是struts2中的概念?${}是JSP的简易表达式,难道${}在设计时知道struts2中要用值栈,所以为了方便struts2的取值因此添加了${}对值栈取值?
      

  4.   

    你使用${name}
    他默认会先去pageContext中,找不到再去requestScope找,而此时的request已经被重写了,代码如下
    request = new StrutsRequestWrapper(request);
    使用这个被strust重写了的request,会先去值栈中找,找不到再去request中找