struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 12344] New: - Seems like you can only save ActionErrors in request scope...
Date Thu, 05 Sep 2002 20:21:58 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12344>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12344

Seems like you can only save ActionErrors in request scope...

           Summary: Seems like you can only save ActionErrors in request
                    scope...
           Product: Struts
           Version: 1.1 Beta 2
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: Utilities
        AssignedTo: struts-dev@jakarta.apache.org
        ReportedBy: beskrowni@alumni.cmu.edu


at least if you want to display your errors using <html:errors/>.  this is 
because the ErrorsTag retrieves the ActionErrors object using 
RequestUtils.getActionErrors(PageContext, String), which retrieves the stored 
ActionErrors via:

Object value = pageContext.getAttribute(paramName, PageContext.REQUEST_SCOPE);

i don't think this was a problem until declarative exception handling allowed 
you to specify a scope in which to store the ActionErrors object the 
ExceptionHandler created.  it just so happens i wanted to store my ActionErrors 
in session scope, and discovered that my errors stopped appearing on the page.  
(by the the way, RequestUtils.getActionMessages() has the same problem.)  there 
are two ways to fix this:

(1) just search all scopes using findAttribute() instead of getAttribute().  
here's the diff on RequestUtils for that:

Index: RequestUtils.java
===================================================================
RCS file: /home/cvspublic/jakarta-
struts/src/share/org/apache/struts/util/RequestUtils.java,v
retrieving revision 1.53
diff -b -c -r1.53 RequestUtils.java
*** RequestUtils.java	23 Aug 2002 02:37:12 -0000	1.53
--- RequestUtils.java	5 Sep 2002 19:38:24 -0000
***************
*** 1548,1554 ****
  
          ActionErrors errors = new ActionErrors();
  
!         Object value = pageContext.getAttribute(paramName, 
PageContext.REQUEST_SCOPE);
  
          try {
          if (value == null) {
--- 1548,1554 ----
  
          ActionErrors errors = new ActionErrors();
  
!         Object value = pageContext.findAttribute(paramName);
  
          try {
          if (value == null) {


(2)  you could change method signature to accept a scope.  this would require 
quite a few more changes in RequestUtils and ErrorsTag.  basically, you'd have 
to add a scope attribute to ErrorsTag, then pass it to RequestUtils.getErrorsTag
().  If you want to pursue this option, let me know and i'll send a diff for it 
as well.

(3) ok, so i guess there is one more option, and that is to remove the 
capability to store ActionErrors in the session as provided by the declarative 
exception handling.  hopefully you won't choose this option, since that would 
be somewhat limiting to me.

(WORK-AROUND) by the way, if you do for some reason find yourself storing an 
ActionErrors object in the session, and you want to access it via the errors 
tag, try the following code:

<%@ page import="org.apache.struts.action.Action"%>
<bean:define id="foo" toScope="request"
             name="<% Action.ERROR_KEY %>" scope="session"/>
<html:errors name="foo"/>

--
To unsubscribe, e-mail:   <mailto:struts-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@jakarta.apache.org>


Mime
View raw message