You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/09/22 06:16:28 UTC

svn commit: r290884 - in /beehive/trunk/netui: src/tags-html/org/apache/beehive/netui/tags/html/ test/webapps/drt/coreWeb/validation/messages/bundles/ test/webapps/drt/testRecorder/config/ test/webapps/drt/testRecorder/tests/

Author: rich
Date: Wed Sep 21 21:16:10 2005
New Revision: 290884

URL: http://svn.apache.org/viewcvs?rev=290884&view=rev
Log:
This is a contribution from Carlin Rogers to address  http://issues.apache.org/jira/browse/BEEHIVE-307 : Struts validator support for the msg and args' bundle attribute is not working

tests: bvt in netui (WinXP)
BB: self (linux)


Added:
    beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/
    beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf   (with props)
    beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp   (with props)
    beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml   (with props)
Modified:
    beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java
    beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml

Modified: beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java?rev=290884&r1=290883&r2=290884&view=diff
==============================================================================
--- beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java (original)
+++ beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/ErrorBaseTag.java Wed Sep 21 21:16:10 2005
@@ -118,6 +118,14 @@
         if (key.length() == 0) {
             return "";
         }
+        else if (!report.isResource()) {
+            //
+            // This covers the case where the validator has already used MessageResources
+            // with an alternate resource bundle to formatted the message before
+            // creating the ActionMessage. Just return the already formatted message.
+            //
+            message = report.getKey();
+        }
         else {
             ModuleConfig curModuleConfig = RequestUtils.getModuleConfig(pageContext);
             ServletContext servletContext = pageContext.getServletContext();

Added: beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf?rev=290884&view=auto
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf (added)
+++ beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf Wed Sep 21 21:16:10 2005
@@ -0,0 +1,154 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * 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.
+ *
+ * $Header:$
+ */
+package validation.messages.bundles;
+
+import javax.servlet.http.HttpSession;
+
+import org.apache.beehive.netui.pageflow.Forward;
+import org.apache.beehive.netui.pageflow.PageFlowController;
+import org.apache.beehive.netui.pageflow.annotations.Jpf;
+
+import validation.messages.ValidatableFormData;
+
+@Jpf.Controller(
+    messageBundles = {
+        @Jpf.MessageBundle(bundlePath = "validation.messages.messages"),
+        @Jpf.MessageBundle(bundlePath = "validation.messages.moremessages",
+                           bundleName = "more")
+    },
+    validatorVersion = Jpf.ValidatorVersion.oneOne,
+    validatableBeans = {
+        @Jpf.ValidatableBean(
+            type = validation.messages.ValidatableFormData.class,
+            validatableProperties = {
+                @Jpf.ValidatableProperty(
+                    propertyName = "item1",
+                    validateMinLength = 
+                        @Jpf.ValidateMinLength(
+                            chars = 2,
+                            message = "minimum length for {0} is {1} chars",
+                            messageArgs = {
+                                @Jpf.MessageArg(
+                                    arg = "item1"
+                                ),
+                                @Jpf.MessageArg(
+                                    arg = "two"
+                                )
+                            }
+                        )
+                ),
+                @Jpf.ValidatableProperty(
+                    propertyName = "item2",
+                    validateMaxLength = 
+                        @Jpf.ValidateMaxLength(
+                            chars = 4,
+                            messageKey = "maxlength.msg",
+                            bundleName = "more",
+                            messageArgs = {
+                                @Jpf.MessageArg(
+                                    bundleName = "more",
+                                    argKey = "item2.maxlength.name"
+                                ),
+                                @Jpf.MessageArg(
+                                    bundleName = "more",
+                                    argKey = "item2.maxlength.length"
+                                )
+                            }
+                        )
+                ),
+                @Jpf.ValidatableProperty(
+                    propertyName = "item3",
+                    validateMinLength = 
+                        @Jpf.ValidateMinLength(
+                            chars = 6,
+                            messageKey = "minlength.msg",
+                            messageArgs = {
+                                @Jpf.MessageArg(
+                                    arg = "six",
+                                    position = 1
+                                )
+                            }
+                        )
+                ),
+                @Jpf.ValidatableProperty(
+                    propertyName = "item4",
+                    validateMaxLength =
+                        @Jpf.ValidateMaxLength(
+                            chars = 8,
+                            messageKey = "maxlength.msg",
+                            bundleName = "more",
+                            messageArgs = {
+                                @Jpf.MessageArg(
+                                    argKey = "item4.maxlength.length",
+                                    bundleName = "more",
+                                    position = 1
+                                ),
+                                @Jpf.MessageArg(
+                                    argKey = "item4.maxlength.name",
+                                    bundleName = "more",
+                                    position = 0
+                                )
+                            }
+                        )
+                )
+            }
+        )
+    }
+)
+public class Controller extends PageFlowController
+{
+    @Jpf.Action(
+        forwards={
+           @Jpf.Forward(name="index", path="index.jsp")
+        }
+    )
+    protected Forward begin()
+    {
+        return new Forward("index");
+    }
+
+
+    /**
+     * Callback that is invoked when this controller instance is created.
+     */
+    protected void onCreate()
+    {
+    }
+
+    /**
+     * Callback that is invoked when this controller instance is destroyed.
+     */
+    protected void onDestroy(HttpSession session)
+    {
+    }
+
+
+    @Jpf.Action(
+        forwards = {
+            @Jpf.Forward(name = "success", path = "index.jsp")
+        },
+        validationErrorForward = @Jpf.Forward(name = "errors",
+                                              path = "index.jsp")
+    )
+    protected Forward validate(ValidatableFormData form)
+    {
+        Forward forward = new Forward( "success" );
+        return forward;
+    }
+}
+

Propchange: beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/Controller.jpf
------------------------------------------------------------------------------
    svn:eol-style = native

Added: beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp?rev=290884&view=auto
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp (added)
+++ beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp Wed Sep 21 21:16:10 2005
@@ -0,0 +1,58 @@
+<%@ page language="java" contentType="text/html;charset=UTF-8"%>
+<%@ taglib prefix="netui" uri="http://beehive.apache.org/netui/tags-html-1.0"%>
+
+<netui:html>
+    <head>
+        <netui:base/>
+    </head>
+    <netui:body>
+        <h3>Declarative Validation Test</h3>
+
+        <netui:form action="validate">
+            <table>
+                <tr valign="top">
+                    <td>item1:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.item1"></netui:textBox>
+                    </td>
+                    <td>
+                    <netui:error key="item1"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item2:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.item2"></netui:textBox>
+                    </td>
+                    <td>
+                    <netui:error key="item2"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item3:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.item3"></netui:textBox>
+                    </td>
+                    <td>
+                    <netui:error key="item3"/>
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item4:</td>
+                    <td>
+                    <netui:textBox dataSource="actionForm.item4"></netui:textBox>
+                    </td>
+                    <td>
+                    <netui:error key="item4"/>
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <netui:button action="validate"></netui:button>
+        </netui:form>
+        <hr>
+        <netui:errors/>
+    </netui:body>
+</netui:html>
+

Propchange: beehive/trunk/netui/test/webapps/drt/coreWeb/validation/messages/bundles/index.jsp
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml?rev=290884&r1=290883&r2=290884&view=diff
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml (original)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/config/testRecorder-tests.xml Wed Sep 21 21:16:10 2005
@@ -8196,6 +8196,18 @@
          </features>
       </test>
       <test>
+         <name>ValidatorMsgBundles</name>
+         <description>Test the support for alternative message bundles for messages and args in the declarative validation annotations (version 1.1 of the validator).</description>
+         <webapp>coreWeb</webapp>
+         <categories>
+            <category>bvt</category>
+            <category>corePageFlow</category>
+         </categories>
+         <features>
+            <feature>Validation</feature>
+         </features>
+      </test>
+      <test>
          <name>VariantValidation</name>
          <description>Test support of locale variant in the validation locale rules and creation of the validation rules XML file.</description>
          <webapp>coreWeb</webapp>

Added: beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml?rev=290884&view=auto
==============================================================================
--- beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml (added)
+++ beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml Wed Sep 21 21:16:10 2005
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
+   <ses:sessionName>ValidatorMsgBundles</ses:sessionName>
+   <ses:tester>crogers</ses:tester>
+   <ses:startDate>31 Aug 2005, 12:00:49.276 PM MDT</ses:startDate>
+   <ses:description>Test the support for alternative message bundles for messages and args in the declarative validation annotations.</ses:description>
+   <ses:tests>
+      <ses:test>
+         <ses:testNumber>1</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/validation/messages/bundles/Controller.jpf</ses:uri>
+            <ses:method>GET</ses:method>
+            <ses:parameters/>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>F1372A952AC756C671D70F2A99DD9C91</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>nde-textsize</ses:name>
+                  <ses:value>16px</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>UTF-8,*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=F1372A952AC756C671D70F2A99DD9C91; nde-textsize=16px</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+    <head>
+        <base href="http://localhost:8080/coreWeb/validation/messages/bundles/index.jsp">
+    </head>
+    <body>
+        <h3>Declarative Validation Test</h3>
+
+        <form action="/coreWeb/validation/messages/bundles/validate.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>item1:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item1}">
+                    </td>
+                    <td>
+                    
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item2:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item2}">
+                    </td>
+                    <td>
+                    
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item3:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item3}">
+                    </td>
+                    <td>
+                    
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item4:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item4}">
+                    </td>
+                    <td>
+                    
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <input type="submit" name="actionOverride:validate" value="Click">
+        </form>
+        <hr>
+        
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+      <ses:test>
+         <ses:testNumber>2</ses:testNumber>
+         <ses:request>
+            <ses:protocol>HTTP</ses:protocol>
+            <ses:protocolVersion>1.1</ses:protocolVersion>
+            <ses:host>localhost</ses:host>
+            <ses:port>8080</ses:port>
+            <ses:uri>/coreWeb/validation/messages/bundles/validate.do</ses:uri>
+            <ses:method>POST</ses:method>
+            <ses:parameters>
+               <ses:parameter>
+                  <ses:name>actionOverride:validate</ses:name>
+                  <ses:value>Click</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.item1}</ses:name>
+                  <ses:value>1</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.item2}</ses:name>
+                  <ses:value>12345</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.item3}</ses:name>
+                  <ses:value>1234</ses:value>
+               </ses:parameter>
+               <ses:parameter>
+                  <ses:name>{actionForm.item4}</ses:name>
+                  <ses:value>123456789</ses:value>
+               </ses:parameter>
+            </ses:parameters>
+            <ses:cookies>
+               <ses:cookie>
+                  <ses:name>JSESSIONID</ses:name>
+                  <ses:value>F1372A952AC756C671D70F2A99DD9C91</ses:value>
+               </ses:cookie>
+               <ses:cookie>
+                  <ses:name>nde-textsize</ses:name>
+                  <ses:value>16px</ses:value>
+               </ses:cookie>
+            </ses:cookies>
+            <ses:headers>
+               <ses:header>
+                  <ses:name>accept</ses:name>
+                  <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-charset</ses:name>
+                  <ses:value>UTF-8,*</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-encoding</ses:name>
+                  <ses:value>gzip,deflate</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>accept-language</ses:name>
+                  <ses:value>en-us,en;q=0.5</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>connection</ses:name>
+                  <ses:value>keep-alive</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-length</ses:name>
+                  <ses:value>146</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>content-type</ses:name>
+                  <ses:value>application/x-www-form-urlencoded</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>cookie</ses:name>
+                  <ses:value>JSESSIONID=F1372A952AC756C671D70F2A99DD9C91; nde-textsize=16px</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>host</ses:name>
+                  <ses:value>localhost:8080</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>keep-alive</ses:name>
+                  <ses:value>300</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>referer</ses:name>
+                  <ses:value>http://localhost:8080/coreWeb/validation/messages/bundles/Controller.jpf</ses:value>
+               </ses:header>
+               <ses:header>
+                  <ses:name>user-agent</ses:name>
+                  <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6</ses:value>
+               </ses:header>
+            </ses:headers>
+         </ses:request>
+         <ses:response>
+            <ses:statusCode>200</ses:statusCode>
+            <ses:reason/>
+            <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+	"http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+    <head>
+        <base href="http://localhost:8080/coreWeb/validation/messages/bundles/index.jsp">
+    </head>
+    <body>
+        <h3>Declarative Validation Test</h3>
+
+        <form action="/coreWeb/validation/messages/bundles/validate.do" method="post">
+            <table>
+                <tr valign="top">
+                    <td>item1:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item1}" value="1">
+                    </td>
+                    <td>
+                    minimum length for item1 is two chars
+
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item2:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item2}" value="12345">
+                    </td>
+                    <td>
+                    Maximum length validation: item two cannot be more than four chars.
+
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item3:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item3}" value="1234">
+                    </td>
+                    <td>
+                    Minimum length validation: Item3 cannot be less than six chars.
+
+                    </td>
+                </tr>
+                <tr valign="top">
+                    <td>item4:</td>
+                    <td>
+                    <input type="text" name="{actionForm.item4}" value="123456789">
+                    </td>
+                    <td>
+                    Maximum length validation: item four cannot be more than eight chars.
+
+                    </td>
+                </tr>
+            </table>
+            <br/>
+            &nbsp;
+            <input type="submit" name="actionOverride:validate" value="Click">
+        </form>
+        <hr>
+        Minimum length validation: Item3 cannot be less than six chars.
+minimum length for item1 is two chars
+Maximum length validation: item four cannot be more than eight chars.
+Maximum length validation: item two cannot be more than four chars.
+
+    </body>
+
+</html>]]></ses:responseBody>
+         </ses:response>
+      </ses:test>
+   </ses:tests>
+   <ses:endDate>31 Aug 2005, 12:01:35.813 PM MDT</ses:endDate>
+   <ses:testCount>2</ses:testCount>
+</ses:recorderSession>
\ No newline at end of file

Propchange: beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ValidatorMsgBundles.xml
------------------------------------------------------------------------------
    svn:eol-style = native