Revision: 1359
http://stripes.svn.sourceforge.net/stripes/?rev=1359&view=rev
Author: bengunter
Date: 2010-11-29 15:05:33 +0000 (Mon, 29 Nov 2010)
Log Message:
-----------
Fixed STS-780: ValidationErrorReportResolution error with XHTML. The validation
error report is only sent to the client if Stripes.DebugMode is true. If false
then a new exception type, SourcePageNotFoundException, is thrown. This
exception can be handled by an ExceptionHandler as the developer sees fit.
Modified Paths:
--------------
branches/1.5.x/stripes/src/net/sourceforge/stripes/action/ActionBeanContext.java
Added Paths:
-----------
branches/1.5.x/stripes/src/net/sourceforge/stripes/exception/SourcePageNotFoundException.java
Modified:
branches/1.5.x/stripes/src/net/sourceforge/stripes/action/ActionBeanContext.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/action/ActionBeanContext.java
2010-11-23 22:43:39 UTC (rev 1358)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/action/ActionBeanContext.java
2010-11-29 15:05:33 UTC (rev 1359)
@@ -28,6 +28,7 @@
import net.sourceforge.stripes.controller.FlashScope;
import net.sourceforge.stripes.controller.StripesConstants;
import net.sourceforge.stripes.controller.StripesFilter;
+import net.sourceforge.stripes.exception.SourcePageNotFoundException;
import net.sourceforge.stripes.tag.ErrorsTag;
import net.sourceforge.stripes.util.CryptoUtil;
import net.sourceforge.stripes.util.Log;
@@ -218,14 +219,17 @@
* this method.</p>
*
* @return Resolution a resolution that will forward the user to the page
they came from
- * @throws IllegalStateException if the information required to construct
a source page
- * resolution cannot be found in the request.
+ * @throws SourcePageNotFoundException if the information required to
construct a source page
+ * resolution cannot be found in the request.
* @see #getSourcePage()
*/
- public Resolution getSourcePageResolution() {
+ public Resolution getSourcePageResolution() throws
SourcePageNotFoundException {
String sourcePage = getSourcePage();
if (sourcePage == null) {
- return new ValidationErrorReportResolution(getValidationErrors());
+ if (StripesFilter.getConfiguration().isDebugMode())
+ return new ValidationErrorReportResolution(this);
+ else
+ throw new SourcePageNotFoundException(this);
}
else {
return new ForwardResolution(sourcePage);
@@ -266,25 +270,18 @@
class ValidationErrorReportResolution implements Resolution {
private static final Log log =
Log.getInstance(ValidationErrorReportResolution.class);
- private ValidationErrors errors;
+ private ActionBeanContext context;
- protected ValidationErrorReportResolution(ValidationErrors errors) {
- this.errors = errors;
+ /** Construct a new instance to report validation errors in the specified
context. */
+ protected ValidationErrorReportResolution(ActionBeanContext context) {
+ this.context = context;
}
public void execute(HttpServletRequest request, HttpServletResponse
response) throws Exception {
// log an exception for the stack trace
- Exception exception = new IllegalStateException(
- "Here's how it is. Someone (quite possibly the Stripes
Dispatcher) needed " +
- "to get the source page resolution. But no source page was
supplied in the " +
- "request, and unless you override
ActionBeanContext.getSourcePageResolution() " +
- "you're going to need that value. When you use a
<stripes:form> tag a hidden " +
- "field called '" + StripesConstants.URL_KEY_SOURCE_PAGE + "'
is included. " +
- "If you write your own forms or links that could generate
validation errors, " +
- "you must include a value for this parameter. This can be
done by calling " +
- "request.getServletPath().");
+ SourcePageNotFoundException exception = new
SourcePageNotFoundException(this.context);
log.error(exception);
-
+
// start the HTML error report
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
@@ -297,7 +294,7 @@
sendErrors(request, response);
writer.println("</p></body></html>");
}
-
+
protected void sendErrors(HttpServletRequest request, HttpServletResponse
response)
throws Exception {
// Output all errors in a standard format
@@ -325,7 +322,7 @@
PrintWriter writer = response.getWriter();
writer.write(header);
- for (List<ValidationError> list : errors.values()) {
+ for (List<ValidationError> list :
this.context.getValidationErrors().values()) {
for (ValidationError fieldError : list) {
writer.write(openElement);
writer.write(fieldError.getMessage(locale));
Added:
branches/1.5.x/stripes/src/net/sourceforge/stripes/exception/SourcePageNotFoundException.java
===================================================================
---
branches/1.5.x/stripes/src/net/sourceforge/stripes/exception/SourcePageNotFoundException.java
(rev 0)
+++
branches/1.5.x/stripes/src/net/sourceforge/stripes/exception/SourcePageNotFoundException.java
2010-11-29 15:05:33 UTC (rev 1359)
@@ -0,0 +1,54 @@
+/* Copyright 2010 Ben Gunter
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package net.sourceforge.stripes.exception;
+
+import net.sourceforge.stripes.action.ActionBeanContext;
+import net.sourceforge.stripes.controller.StripesConstants;
+
+/**
+ * A subclass of {...@link IllegalStateException} that is thrown when
validation errors are present on
+ * a request and the source page cannot be determined.
+ *
+ * @author Ben Gunter
+ * @since Stripes 1.5.5
+ */
+public class SourcePageNotFoundException extends IllegalStateException {
+ private ActionBeanContext actionBeanContext;
+
+ /**
+ * Construct a new instance for the given action bean context.
+ *
+ * @param actionBeanContext The context.
+ */
+ public SourcePageNotFoundException(ActionBeanContext actionBeanContext) {
+ // @formatter:off
+ super(
+ "Here's how it is. Someone (quite possibly the Stripes
Dispatcher) needed " +
+ "to get the source page resolution. But no source page was
supplied in the " +
+ "request, and unless you override
ActionBeanContext.getSourcePageResolution() " +
+ "you're going to need that value. When you use a
<stripes:form> tag a hidden " +
+ "field called '" + StripesConstants.URL_KEY_SOURCE_PAGE + "'
is included. " +
+ "If you write your own forms or links that could generate
validation errors, " +
+ "you must include a value for this parameter. This can be
done by calling " +
+ "request.getServletPath().");
+ // @formatter:on
+ this.actionBeanContext = actionBeanContext;
+ }
+
+ /** Get the action bean context in which this exception occurred. */
+ public ActionBeanContext getActionBeanContext() {
+ return actionBeanContext;
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development