如何访问从HttpServletRequest对象Struts的值栈?

我所遇到的一些代码正在访问由简单地调用HttpServletRequest对象上的getAttribute()存储在Struts值栈的值。 我不认为这是可能的,它在哪儿记录?

从动作类代码(它不将它添加到类只值栈):

private PaginatedChunk searchResults; public PaginatedChunk getSearchResults() { return searchResults; } public void setSearchResults(PaginatedChunk searchResults) { this.searchResults = searchResults; }

这是在从请求拉动值(和它的工作原理!?)的自定义标签的代码:

HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); PaginatedChunk searchResults = (PaginatedChunk) request.getAttribute("searchResults");

能向我解释的人如何工作? 我认为值栈不是通过请求直接访问。

我们正在运行的struts2 v2.1.8.1

--------------解决方案-------------

乍一看,我肯定会同意的。 什么你看不看直观。 但是,什么是真正发生的事情是获得从值栈访问请求对象,而不是真的反之亦然。 你开始在值栈的pageContext,而你的东西时仍然可以访问值栈年底仍在工作(它也可以访问请求太)。 这里是如何发生的:

展望这里(http://www.docjar.com/html/api/org/apache/struts2/ServletActionContext.java.html),我们看到“的pageContext”来源于:

93 public static PageContext getPageContext() {
94 return (PageContext) ActionContext.getContext().get(PAGE_CONTEXT);
95 }

的getContext()。get()方法返回一个对象,我们知道这是一种Pa​​geContext中的。 但什么是实现类?

创建一个简单的动作:

package com.quaternion.action.test;

import com.opensymphony.xwork2.ActionSupport;

public class RequestAccessTest extends ActionSupport{
public String getGreeting(){
return "Hello from Request AccessTest";
}
}

然后在JSP:

<%@taglib prefix="s" uri="/struts-tags"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<body>
<h1>Request Access Test</h1>
<%
HttpServletRequest r = (HttpServletRequest) pageContext.getRequest();
String aGreeting = (String) r.getAttribute("greeting");
System.out.println(aGreeting);
System.out.println("R's class is:" + r.getClass().getCanonicalName());
%>
</body>
</html>

在我的控制台我看到印:

INFO: Hello from Request AccessTest
INFO: R's class is:org.apache.struts2.dispatcher.StrutsRequestWrapper

所以,我们真的是有StrutsRequestWrapper处理(现在我们知道我们在实际处理很容易)...

http://massapi.com/source/struts-2.2.1/src/core/src/main/java/org/apache/struts2/dispatcher/StrutsRequestWrapper.java.html

看着上面的链接,我们看到的getAttribute确实覆盖。

在第65行开始,我们看到它试图获取值出请求,然后如果失败就接着把它弄出来的价值栈。

这哪里是记录? 我想这是记录在这里,截至目前)

分类:java的 时间:2015-03-15 人气:0
本文关键词: Java中,Struts2的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.051 (s). 10 q(s)