Author: carlucci
Date: Tue Oct  9 20:07:23 2012
New Revision: 1396275

URL: http://svn.apache.org/viewvc?rev=1396275&view=rev
Log:
Rave-806:  Friendly error message page with option to render stack trace as an 
admin preference.  Patch supplied by Daniel Gornstein

Added:
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ShowStackTraceTag.java
    
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/ShowStackTraceTagTest.java
Modified:
    
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/util/PortalPreferenceKeys.java
    
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/PortalPreferenceForm.java
    rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld
    rave/trunk/rave-portal-resources/src/main/resources/messages.properties
    rave/trunk/rave-portal-resources/src/main/resources/messages_es.properties
    rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties
    rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql
    
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/admin/preferencedetail.jsp
    rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/error.jsp

Modified: 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/util/PortalPreferenceKeys.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/util/PortalPreferenceKeys.java?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/util/PortalPreferenceKeys.java
 (original)
+++ 
rave/trunk/rave-components/rave-core/src/main/java/org/apache/rave/portal/web/util/PortalPreferenceKeys.java
 Tue Oct  9 20:07:23 2012
@@ -30,4 +30,5 @@ public final class PortalPreferenceKeys 
     public static final String INITIAL_WIDGET_STATUS = "initialWidgetStatus";
     public static final String EXTERNAL_MARKETPLACE_URL = 
"externalMarketplaceUrl";
     public static final String WIDGET_HEIGHT = "defaultWidgetHeight";
+    public static final String SHOW_STACK_TRACE = "showStackTrace";
 }

Modified: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/PortalPreferenceForm.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/PortalPreferenceForm.java?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/PortalPreferenceForm.java
 (original)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/model/PortalPreferenceForm.java
 Tue Oct  9 20:07:23 2012
@@ -36,7 +36,8 @@ public class PortalPreferenceForm {
     public static final String DEFAULT_JAVASCRIPT_DEBUG_MODE = "1";
     public static final String DEFAULT_WIDGET_HEIGHT = "250";
     public static final String DEFAULT_INITIAL_WIDGET_STATUS = "PREVIEW";
-    public static final String DEFAULT_EXTERNAL_MARKETPLACE_URL = "";    
+    public static final String DEFAULT_EXTERNAL_MARKETPLACE_URL = "";
+    public static final String DEFAULT_SHOW_STACK_TRACE ="0";
 
 
     private Map<String, PortalPreference> preferenceMap;
@@ -66,6 +67,9 @@ public class PortalPreferenceForm {
         if(getDefaultWidgetHeight() == null){
             preferenceMap.put(WIDGET_HEIGHT, new 
PortalPreferenceImpl(WIDGET_HEIGHT, DEFAULT_WIDGET_HEIGHT));
         }
+        if(getShowStackTrace() == null){
+            preferenceMap.put(SHOW_STACK_TRACE, new 
PortalPreferenceImpl(SHOW_STACK_TRACE, DEFAULT_SHOW_STACK_TRACE));
+        }
     }
     
     public PortalPreference getExternalMarketplaceUrl() {
@@ -96,6 +100,14 @@ public class PortalPreferenceForm {
         preferenceMap.put(WIDGET_HEIGHT, widgetHeight);
     }
 
+    public PortalPreference getShowStackTrace(){
+        return preferenceMap.get(SHOW_STACK_TRACE);
+    }
+
+    public void setShowStackTrace(PortalPreference showStackTrace){
+        preferenceMap.put(SHOW_STACK_TRACE, showStackTrace);
+    }
+
     public PortalPreference getTitleSuffix() {
         return preferenceMap.get(TITLE_SUFFIX);
     }

Added: 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ShowStackTraceTag.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ShowStackTraceTag.java?rev=1396275&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ShowStackTraceTag.java
 (added)
+++ 
rave/trunk/rave-components/rave-web/src/main/java/org/apache/rave/portal/web/tag/ShowStackTraceTag.java
 Tue Oct  9 20:07:23 2012
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.rave.portal.web.tag;
+
+import org.apache.rave.portal.model.PortalPreference;
+import org.apache.rave.portal.service.PortalPreferenceService;
+import org.apache.rave.portal.web.util.PortalPreferenceKeys;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.jsp.JspException;
+
+/**
+ * JSP tag that renders the value of the ShowStackTrace portal preference
+ */
+public class ShowStackTraceTag extends 
AbstractContextAwareSingletonBeanDependentTag<PortalPreferenceService> {
+    private Logger log = LoggerFactory.getLogger(getClass());
+    private final String SHOW_STACK_TRACE_OFF = "0";
+    private final String SHOW_STACK_TRACE_ON = "1";
+
+    public ShowStackTraceTag() {
+        super(PortalPreferenceService.class);
+    }
+
+    @Override
+    public int doStartTag() throws JspException {
+        writeString(getShowStackTraceValue());
+        return EVAL_BODY_INCLUDE;
+    }
+
+    private String getShowStackTraceValue() {
+        // default to off
+        String showStackTrace = SHOW_STACK_TRACE_OFF;
+        try {
+            PortalPreference debugModePref = 
getBean().getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE);
+            if (debugModePref != null && 
SHOW_STACK_TRACE_ON.equals(debugModePref.getValue())) {
+                showStackTrace = SHOW_STACK_TRACE_ON;
+            }
+        }
+        catch(Exception e) {
+            // if there are any errors we will revert to the default value
+            log.warn("unable to determine the value of portal preference '" + 
PortalPreferenceKeys.SHOW_STACK_TRACE + "'.  Defaulting to '" + 
SHOW_STACK_TRACE_OFF + "'", e);
+        }
+        finally {
+            return showStackTrace;
+        }
+    }
+}

Modified: 
rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld 
(original)
+++ rave/trunk/rave-components/rave-web/src/main/resources/META-INF/rave.tld 
Tue Oct  9 20:07:23 2012
@@ -95,4 +95,10 @@
         
<tag-class>org.apache.rave.portal.web.tag.JavaScriptDebugModeTag</tag-class>
         <body-content>JSP</body-content>
     </tag>
+    <tag>
+        <description>Renders the value of the ShowStackTrace portal 
preference</description>
+        <name>render-show-stack-trace</name>
+        <tag-class>org.apache.rave.portal.web.tag.ShowStackTraceTag</tag-class>
+        <body-content>JSP</body-content>
+    </tag>
 </taglib>

Added: 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/ShowStackTraceTagTest.java
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/ShowStackTraceTagTest.java?rev=1396275&view=auto
==============================================================================
--- 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/ShowStackTraceTagTest.java
 (added)
+++ 
rave/trunk/rave-components/rave-web/src/test/java/org/apache/rave/portal/web/tag/ShowStackTraceTagTest.java
 Tue Oct  9 20:07:23 2012
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.rave.portal.web.tag;
+
+import org.apache.rave.portal.model.PortalPreference;
+import org.apache.rave.portal.model.impl.PortalPreferenceImpl;
+import org.apache.rave.portal.service.PortalPreferenceService;
+import org.apache.rave.portal.web.util.PortalPreferenceKeys;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.web.context.WebApplicationContext;
+
+import javax.servlet.ServletContext;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.JspWriter;
+import javax.servlet.jsp.PageContext;
+import java.io.IOException;
+
+import static org.easymock.EasyMock.*;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ShowStackTraceTagTest {
+    private PortalPreferenceService service;
+    private ShowStackTraceTag tag;
+    private WebApplicationContext wContext;
+    private PageContext pageContext;
+    private ServletContext servletContext;
+    private JspWriter writer;
+
+    final String SHOW_STACK_TRACE_ON = "1";
+    final String SHOW_STACK_TRACE_OFF = "0";
+
+    @Before
+    public void setup() throws JspException {
+        service = createMock(PortalPreferenceService.class);
+        wContext = createNiceMock(WebApplicationContext.class);
+        pageContext = createNiceMock(PageContext.class);
+        servletContext = createNiceMock(ServletContext.class);
+        writer = createNiceMock(JspWriter.class);
+
+        tag = new ShowStackTraceTag();
+        tag.setPageContext(pageContext);
+    }
+
+    @Test
+    public void doStartTag_debugOn() throws IOException, JspException {
+        PortalPreference portalPreference = new 
PortalPreferenceImpl(PortalPreferenceKeys.SHOW_STACK_TRACE, 
SHOW_STACK_TRACE_ON);
+
+        
expect(service.getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE)).andReturn(portalPreference);
+        
expect(pageContext.getServletContext()).andReturn(servletContext).anyTimes();
+        
expect(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).andReturn(wContext).anyTimes();
+        
expect(wContext.getBean(PortalPreferenceService.class)).andReturn(service).anyTimes();
+        expect(pageContext.getOut()).andReturn(writer);
+        replay(service, pageContext, servletContext, wContext, writer);
+
+        int result = tag.doStartTag();
+
+        assertThat(result, is(javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE));
+        verify(service, pageContext, servletContext, wContext, writer);
+    }
+
+    @Test
+    public void doStartTag_debugOff() throws IOException, JspException {
+        PortalPreference portalPreference = new 
PortalPreferenceImpl(PortalPreferenceKeys.SHOW_STACK_TRACE, 
SHOW_STACK_TRACE_OFF);
+
+        
expect(service.getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE)).andReturn(portalPreference);
+        
expect(pageContext.getServletContext()).andReturn(servletContext).anyTimes();
+        
expect(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).andReturn(wContext).anyTimes();
+        
expect(wContext.getBean(PortalPreferenceService.class)).andReturn(service).anyTimes();
+        expect(pageContext.getOut()).andReturn(writer);
+        replay(service, pageContext, servletContext, wContext, writer);
+
+        int result = tag.doStartTag();
+
+        assertThat(result, is(javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE));
+        verify(service, pageContext, servletContext, wContext, writer);
+    }
+
+    @Test
+    public void doStartTag_exception() throws IOException, JspException {
+        PortalPreference portalPreference = new 
PortalPreferenceImpl(PortalPreferenceKeys.SHOW_STACK_TRACE, 
SHOW_STACK_TRACE_OFF);
+
+        
expect(service.getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE)).andThrow(new
 RuntimeException("error"));
+        
expect(pageContext.getServletContext()).andReturn(servletContext).anyTimes();
+        
expect(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).andReturn(wContext).anyTimes();
+        
expect(wContext.getBean(PortalPreferenceService.class)).andReturn(service).anyTimes();
+        expect(pageContext.getOut()).andReturn(writer);
+        replay(service, pageContext, servletContext, wContext, writer);
+
+        int result = tag.doStartTag();
+
+        assertThat(result, is(javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE));
+        verify(service, pageContext, servletContext, wContext, writer);
+    }
+
+    @Test
+    public void doStartTag_nullPreference() throws IOException, JspException {
+        PortalPreference portalPreference = null;
+
+        
expect(service.getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE)).andReturn(portalPreference);
+        
expect(pageContext.getServletContext()).andReturn(servletContext).anyTimes();
+        
expect(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).andReturn(wContext).anyTimes();
+        
expect(wContext.getBean(PortalPreferenceService.class)).andReturn(service).anyTimes();
+        expect(pageContext.getOut()).andReturn(writer);
+        replay(service, pageContext, servletContext, wContext, writer);
+
+        int result = tag.doStartTag();
+
+        assertThat(result, is(javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE));
+        verify(service, pageContext, servletContext, wContext, writer);
+    }
+
+    @Test
+    public void doStartTag_emptyPreference() throws IOException, JspException {
+        PortalPreference portalPreference = new 
PortalPreferenceImpl(PortalPreferenceKeys.SHOW_STACK_TRACE, "");
+
+        
expect(service.getPreference(PortalPreferenceKeys.SHOW_STACK_TRACE)).andReturn(portalPreference);
+        
expect(pageContext.getServletContext()).andReturn(servletContext).anyTimes();
+        
expect(servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)).andReturn(wContext).anyTimes();
+        
expect(wContext.getBean(PortalPreferenceService.class)).andReturn(service).anyTimes();
+        expect(pageContext.getOut()).andReturn(writer);
+        replay(service, pageContext, servletContext, wContext, writer);
+
+        int result = tag.doStartTag();
+
+        assertThat(result, is(javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE));
+        verify(service, pageContext, servletContext, wContext, writer);
+    }
+}

Modified: 
rave/trunk/rave-portal-resources/src/main/resources/messages.properties
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/resources/messages.properties?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/resources/messages.properties 
(original)
+++ rave/trunk/rave-portal-resources/src/main/resources/messages.properties Tue 
Oct  9 20:07:23 2012
@@ -284,10 +284,13 @@ admin.preferencedetail.externalMarketpla
 admin.preferencedetail.titleSuffix=Page title suffix
 admin.preferencedetail.pageSize=Number of items per page (list)
 admin.preferencedetail.defaultWidgetHeight=Default widget height
+admin.preferencedetail.showStackTrace=Show stack trace on error pages
 admin.preferencedetail.pageSize.malformed=Enter a whole number greater than 0
 admin.preferencedetail.javaScriptDebugMode=JavaScript Debug Mode
 admin.preferencedetail.javaScriptDebugMode.true=Enabled
 admin.preferencedetail.javaScriptDebugMode.false=Disabled
+admin.preferencedetail.showStackTrace.true=Enabled
+admin.preferencedetail.showStackTrace.false=Disabled
 admin.preferencedetail.updateButton=Update preferences
 admin.preferencedetail.action.update.success=Preferences have been updated
 admin.preferencedetail.goback=\u00ab Back to overview

Modified: 
rave/trunk/rave-portal-resources/src/main/resources/messages_es.properties
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/resources/messages_es.properties?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/resources/messages_es.properties 
(original)
+++ rave/trunk/rave-portal-resources/src/main/resources/messages_es.properties 
Tue Oct  9 20:07:23 2012
@@ -285,11 +285,14 @@ admin.preferences.edit=Editar preferenci
 admin.preferencedetail.title=Interfaz de administraci\u00F3n Rave - 
Preferencias
 admin.preferencedetail.titleSuffix=Sufijo del titulo de la pagina
 admin.preferencedetail.defaultWidgetHeight=Altura predeterminada Widget
+admin.preferencedetail.showStackTrace=Mostrar seguimiento de pila en las 
páginas de error
 admin.preferencedetail.pageSize=Numero de items por pagina (lista)
 admin.preferencedetail.pageSize.malformed=Entre un numero valido superior a 0
 admin.preferencedetail.javaScriptDebugMode=Modo de Debug de JavaScript
 admin.preferencedetail.javaScriptDebugMode.true=Habilitado
 admin.preferencedetail.javaScriptDebugMode.false=Deshabilitado
+admin.preferencedetail.showStackTrace.true=Habilitado
+admin.preferencedetail.showStackTrace.false=Deshabilitado
 admin.preferencedetail.updateButton=Actualizar preferencias
 admin.preferencedetail.action.update.success=Las preferencias han sido 
actualizadas
 admin.preferencedetail.goback=u00AB Volver a la vista general

Modified: 
rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties 
(original)
+++ rave/trunk/rave-portal-resources/src/main/resources/messages_nl.properties 
Tue Oct  9 20:07:23 2012
@@ -290,9 +290,12 @@ admin.preferencedetail.titleSuffix=Toevo
 admin.preferencedetail.pageSize=Aantal items per pagina (lijst)
 admin.preferencedetail.pageSize.malformed=Voer een geheel getal in groter dan 0
 admin.preferencedetail.defaultWidgetHeight=Standaard widget hoogte
+admin.preferencedetail.showStackTrace=Toon stack trace op foutpagina's
 admin.preferencedetail.javaScriptDebugMode=JavaScript Debug Mode
 admin.preferencedetail.javaScriptDebugMode.true=Ingeschakeld
 admin.preferencedetail.javaScriptDebugMode.false=Uitgeschakeld
+admin.preferencedetail.showStackTrace.true=Ingeschakeld
+admin.preferencedetail.showStackTrace.false=Uitgeschakeld
 admin.preferencedetail.updateButton=Wijzig voorkeuren
 admin.preferencedetail.action.update.success=De voorkeuren zijn bijgewerkt
 admin.preferencedetail.goback=\u00AB Terug naar overzicht

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql 
(original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/db/initial_data.sql 
Tue Oct  9 20:07:23 2012
@@ -1123,6 +1123,13 @@ values (@next_portal_preference_id, 'def
 INSERT INTO portal_preference_values
 values (@next_portal_preference_id, '250');
 UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@portal_preference_seq;
+
+set @next_portal_preference_id = (SELECT seq_count FROM RAVE_PORTAL_SEQUENCES 
WHERE seq_name = @portal_preference_seq);
+INSERT INTO portal_preference (entity_id, preference_key)
+values (@next_portal_preference_id, 'showStackTrace');
+INSERT INTO portal_preference_values
+values (@next_portal_preference_id, '0');
+UPDATE RAVE_PORTAL_SEQUENCES SET seq_count = (seq_count + 1) WHERE seq_name = 
@portal_preference_seq;
 -- end portal preferences
 
 -- category

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/admin/preferencedetail.jsp
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/admin/preferencedetail.jsp?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/admin/preferencedetail.jsp
 (original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/admin/preferencedetail.jsp
 Tue Oct  9 20:07:23 2012
@@ -88,6 +88,20 @@
                                    <form:errors 
path="javaScriptDebugMode.value" cssClass="error"/>
                                </spring:bind>
                            </div>
+                        <div class="control-group">
+                            <spring:bind path="showStackTrace.value">
+                                <form:label path="showStackTrace.value" 
class="control-label">
+                                    <fmt:message 
key="admin.preferencedetail.showStackTrace"/> *
+                                </form:label>
+                                <div class="controls">
+                                    <form:select id="showStackTrace" 
path="showStackTrace.value">
+                                        <form:option value="0"><fmt:message 
key="admin.preferencedetail.showStackTrace.false"/></form:option>
+                                        <form:option value="1"><fmt:message 
key="admin.preferencedetail.showStackTrace.true"/></form:option>
+                                    </form:select>
+                                </div>
+                                <form:errors path="showStackTrace.value" 
cssClass="error"/>
+                            </spring:bind>
+                        </div>
                           <div class="control-group">
                                <spring:bind path="initialWidgetStatus.value">
                                    <form:label 
path="initialWidgetStatus.value" class="control-label">

Modified: 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/error.jsp
URL: 
http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/error.jsp?rev=1396275&r1=1396274&r2=1396275&view=diff
==============================================================================
--- 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/error.jsp 
(original)
+++ 
rave/trunk/rave-portal-resources/src/main/webapp/WEB-INF/jsp/views/error.jsp 
Tue Oct  9 20:07:23 2012
@@ -19,23 +19,24 @@
 <%@ page isErrorPage="true" language="java" trimDirectiveWhitespaces="true" %>
 <%@ include file="/WEB-INF/jsp/includes/taglibs.jsp" %>
 <fmt:setBundle basename="messages"/>
+<c:set var="showStackTrace"><portal:render-show-stack-trace /></c:set>
 <%-- Note: This page has the body definition embedded so we can reference it 
from the web.xml file
 and use it as the default error page for the entire application. --%>
 <tiles:insertDefinition name="templates.base">
     <tiles:putAttribute name="pageTitleKey" value="page.error.title"/>
     <tiles:putAttribute name="body">
-        <header>
-          <h1>
-              <fmt:message key="page.error.title" />
-          </h1>
-        </header>
-        <div id="content" >
-            <div id="errorMessage">
-                <div class="errorMessage">
-                    <fmt:message key="page.error.message" />
-                    &nbsp;<a href="javascript: 
window.location.reload();"><fmt:message key="page.error.reload" /></a>.<br/>
-                    <a 
onclick="document.getElementById('errorStack').style.display = 
'block';"><fmt:message key="page.error.details" /></a>
-                </div>
+        <c:if test="${showStackTrace == 1}">
+        <rave:navbar/>
+            <header>
+                <h1>
+                    <fmt:message key="page.error.title" />
+                </h1>
+            </header>
+        <div id="content" class="container-fluid navbar-spacer">
+            <div id="errorMessage" class="errorMessage">
+                <h2><fmt:message key="page.error.message" />
+                    &nbsp;<a href="javascript: 
window.location.reload();"><fmt:message key="page.error.reload" 
/></a>.</h2><br/>
+                <a 
onclick="document.getElementById('errorStack').style.display = 
'block';"><fmt:message key="page.error.details" /></a>
             </div>
             <div id="errorStack" title="Error Details" >
                 <pre class="errorTrace">
@@ -50,5 +51,20 @@ and use it as the default error page for
                 </button>
             </div>
         </div>
+        </c:if>
+        <c:if test="${showStackTrace == 0}">
+            <rave:navbar/>
+            <header>
+                <h1>
+                    <fmt:message key="page.error.title" />
+                </h1>
+            </header>
+            <div id="content" class="container-fluid navbar-spacer">
+                <div id="errorMessage" class="errorMessage">
+                    <h2><fmt:message key="page.error.message" />
+                        &nbsp;<a href="javascript: 
window.location.reload();"><fmt:message key="page.error.reload" 
/></a>.</h2><br/>
+                </div>
+            </div>
+        </c:if>
     </tiles:putAttribute>
 </tiles:insertDefinition>
\ No newline at end of file


Reply via email to