[ 
https://issues.apache.org/jira/browse/WW-1967?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukasz Lenart updated WW-1967:
------------------------------

    Description: 
Hello,
I have been trying to get validation working with dynamic method invocation, 
using ActionName-aliasName-validation.xml files.

When the struts.property is set >> struts.enable.DynamicMethodInvocation=true,  
 in the DefaultActionMapper the mapping name is changed by removing !submit 
from the action eg fieldValidatorsExamples!submit becomes 
fieldValidatorsExamples.  When the validator tries to find 
FieldValidatorsExampleAction-fieldValidatorsExamples!submit-validator.xml it 
cannot, as the validator is looking for 
FieldValidatorsExampleAction-fieldValidatorsExamples-validator.xml.  But this 
is now not linked to a method.

{code:java}
if (allowDynamicMethodCalls) {
    // handle "name!method" convention.
    String name = mapping.getName();
    int exclamation = name.lastIndexOf("!");
    if (exclamation != -1) {
        mapping.setName(name.substring(0, exclamation)); 
        mapping.setMethod(name.substring(exclamation + 1));
    }
}
{code}

With struts.enable.DynamicMethodInvocation=false, validator works but method 
name is null.

This line of code is causing the problem mapping.setName(name.substring(0, 
exclamation));.  Without this line seems to work but I am no expert!

eg:

{code:xml}
<action name="fieldValidatorsExamples!*" 
class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" 
method="{1}" >
    <result name="input" 
type="dispatcher">/validation/fieldValidatorsExample.jsp</result>
    <result 
type="dispatcher">/validation/successFieldValidatorsExample.jsp</result>
</action>
{code}

{code:html}
<s:form action="fieldValidatorsExamples!submit" namespace="/validation" 
method="POST" theme="xhtml">
    <s:textfield label="Required Validator Field" name="requiredValidatorField" 
/>
    <s:textfield label="Required String Validator Field" 
name="requiredStringValidatorField" />
    <s:textfield label="Integer Validator Field" name="integerValidatorField" />
    <s:textfield label="Date Validator Field" name="dateValidatorField" />
    <s:textfield label="Email Validator Field" name="emailValidatorField" />
    <s:textfield label="URL Validator Field" name="urlValidatorField" />
    <s:textfield label="String Length Validator Field" 
name="stringLengthValidatorField" />
    <s:textfield label="Regex Validator Field" name="regexValidatorField"/>
    <s:textfield label="Field Expression Validator Field" 
name="fieldExpressionValidatorField" />
    <s:submit label="Submit" />
</s:form>
{code}

Cheers Greg

  was:
Hello,
I have been trying to get validation working with dynamic method invocation, 
using ActionName-aliasName-validation.xml files.

When the struts.property is set >> struts.enable.DynamicMethodInvocation=true,  
 in the DefaultActionMapper the mapping name is changed by removing !submit 
from the action eg fieldValidatorsExamples!submit becomes 
fieldValidatorsExamples.  When the validator tries to find 
FieldValidatorsExampleAction-fieldValidatorsExamples!submit-validator.xml it 
cannot, as the validator is looking for 
FieldValidatorsExampleAction-fieldValidatorsExamples-validator.xml.  But this 
is now not linked to a method.

        if (allowDynamicMethodCalls) {
            // handle "name!method" convention.
            String name = mapping.getName();
            int exclamation = name.lastIndexOf("!");
            if (exclamation != -1) {
                mapping.setName(name.substring(0, exclamation)); 
                mapping.setMethod(name.substring(exclamation + 1));
            }
        }


With struts.enable.DynamicMethodInvocation=false, validator works but method 
name is null.

This line of code is causing the problem mapping.setName(name.substring(0, 
exclamation));.  Without this line seems to work but I am no expert!

eg:

<action name="fieldValidatorsExamples!*" 
class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" 
method="{1}" >
<result name="input" 
type="dispatcher">/validation/fieldValidatorsExample.jsp</result>
<result type="dispatcher">/validation/successFieldValidatorsExample.jsp</result>
</action>

<s:form action="fieldValidatorsExamples!submit" namespace="/validation" 
method="POST" theme="xhtml">
            <s:textfield label="Required Validator Field" 
name="requiredValidatorField" />
            <s:textfield label="Required String Validator Field" 
name="requiredStringValidatorField" />
            <s:textfield label="Integer Validator Field" 
name="integerValidatorField" />
            <s:textfield label="Date Validator Field" name="dateValidatorField" 
/>
            <s:textfield label="Email Validator Field" 
name="emailValidatorField" />
            <s:textfield label="URL Validator Field" name="urlValidatorField" />
            <s:textfield label="String Length Validator Field" 
name="stringLengthValidatorField" />
            <s:textfield label="Regex Validator Field" 
name="regexValidatorField"/>
            <s:textfield label="Field Expression Validator Field" 
name="fieldExpressionValidatorField" />
            <s:submit label="Submit" />
</s:form>

Cheers Greg

    
> Dynamic Method Invocation, validator with ActionName-aliasName-validation.xml 
> files.
> ------------------------------------------------------------------------------------
>
>                 Key: WW-1967
>                 URL: https://issues.apache.org/jira/browse/WW-1967
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Actions
>    Affects Versions: 2.0.6
>         Environment: Fedora 4, tomcat
>            Reporter: Greg Huber
>            Priority: Minor
>             Fix For: 2.3.9
>
>         Attachments: patch_WW-1967.txt
>
>
> Hello,
> I have been trying to get validation working with dynamic method invocation, 
> using ActionName-aliasName-validation.xml files.
> When the struts.property is set >> 
> struts.enable.DynamicMethodInvocation=true,   in the DefaultActionMapper the 
> mapping name is changed by removing !submit from the action eg 
> fieldValidatorsExamples!submit becomes fieldValidatorsExamples.  When the 
> validator tries to find 
> FieldValidatorsExampleAction-fieldValidatorsExamples!submit-validator.xml it 
> cannot, as the validator is looking for 
> FieldValidatorsExampleAction-fieldValidatorsExamples-validator.xml.  But this 
> is now not linked to a method.
> {code:java}
> if (allowDynamicMethodCalls) {
>     // handle "name!method" convention.
>     String name = mapping.getName();
>     int exclamation = name.lastIndexOf("!");
>     if (exclamation != -1) {
>         mapping.setName(name.substring(0, exclamation)); 
>         mapping.setMethod(name.substring(exclamation + 1));
>     }
> }
> {code}
> With struts.enable.DynamicMethodInvocation=false, validator works but method 
> name is null.
> This line of code is causing the problem mapping.setName(name.substring(0, 
> exclamation));.  Without this line seems to work but I am no expert!
> eg:
> {code:xml}
> <action name="fieldValidatorsExamples!*" 
> class="org.apache.struts2.showcase.validation.FieldValidatorsExampleAction" 
> method="{1}" >
>     <result name="input" 
> type="dispatcher">/validation/fieldValidatorsExample.jsp</result>
>     <result 
> type="dispatcher">/validation/successFieldValidatorsExample.jsp</result>
> </action>
> {code}
> {code:html}
> <s:form action="fieldValidatorsExamples!submit" namespace="/validation" 
> method="POST" theme="xhtml">
>     <s:textfield label="Required Validator Field" 
> name="requiredValidatorField" />
>     <s:textfield label="Required String Validator Field" 
> name="requiredStringValidatorField" />
>     <s:textfield label="Integer Validator Field" name="integerValidatorField" 
> />
>     <s:textfield label="Date Validator Field" name="dateValidatorField" />
>     <s:textfield label="Email Validator Field" name="emailValidatorField" />
>     <s:textfield label="URL Validator Field" name="urlValidatorField" />
>     <s:textfield label="String Length Validator Field" 
> name="stringLengthValidatorField" />
>     <s:textfield label="Regex Validator Field" name="regexValidatorField"/>
>     <s:textfield label="Field Expression Validator Field" 
> name="fieldExpressionValidatorField" />
>     <s:submit label="Submit" />
> </s:form>
> {code}
> Cheers Greg

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to