Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Not A Problem
-
2.0.6
-
None
-
Fedora 4, tomcat
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.
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