You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (Jira)" <ji...@apache.org> on 2023/06/28 07:00:00 UTC

[jira] [Updated] (WW-3532) client validation isn't generated when using a VisitorFieldValidator annotation

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

Lukasz Lenart updated WW-3532:
------------------------------
    Fix Version/s: 6.4.0
                       (was: 6.2.0)

> client validation isn't generated when using a VisitorFieldValidator annotation
> -------------------------------------------------------------------------------
>
>                 Key: WW-3532
>                 URL: https://issues.apache.org/jira/browse/WW-3532
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.2.1
>         Environment: jboss 5, struts2-core-2.2.1.jar
>            Reporter: David G
>            Priority: Minor
>             Fix For: 6.4.0
>
>         Attachments: AnnotationValidationConfigurationBuilderTest.java
>
>
> When using a VisitorFieldValidator in an action, the generated Javascript doesn't validate fields on the referenced POJO, i.e. the example I have below would only generate:
> <script type="text/javascript">
>     function validateForm_createAccount() {
>         form = document.getElementById("createAccount");
>         clearErrorMessages(form);
>         clearErrorLabels(form);
>         var errors = false;
>         var continueValidation = true;
>         return !errors;
>     }
> </script>
> I have two current workarounds, but they're a bit of a pain:
> 1) Using XML validation instead of annotations.
> 2) Not to use the VisitorFieldValidator model, and instead have the form fields referenced directly in the Action class.
> Here's the code I've been using (a trimmed down version of it anyway ;-) )
> AccountManagementAction.java:
> public class AccountManagementAction extends ActionSupport
> {
> 	private Account account;
> 	public Account getAccount()
> 	{
> 		return account;
> 	}
> 	@VisitorFieldValidator
> 	public void setAccount(Account account)
> 	{
> 		this.account = account;
> 	}
>         ...
> }
> Account.java:
> public class Account
> {
> 	private String username;
> 	public String getUsername()
> 	{
> 		return username;
> 	}
> 	@Validations(
> 		requiredStrings = @RequiredStringValidator(trim = true, message = "Required"),
> 		stringLengthFields = @StringLengthFieldValidator(
> 			minLength = "2", maxLength = "10", trim = true,
> 			message = "This must be between ${minLength} and ${maxLength} letters"),
> 		regexFields = @RegexFieldValidator(expression = "^[0-9a-zA-Z]*$",
> 			message = "Only plain letters and numbers are allowed")
>         )
> 	public void setUsername(String username)
> 	{
> 		this.username = username;
> 	}
> }
> registration.jsp:
> <%@page contentType="text/html" pageEncoding="UTF-8"%>
> <%@ taglib prefix="s" uri="/struts-tags" %>
> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>    "http://www.w3.org/TR/html4/loose.dtd">
> <html>
> 	<head>
> 		<s:head/>
> 	</head>
> 	<body>
> 		<s:form validate="true" action="createAccount">
> 			<s:textfield name="account.username" label="Username" />
> 			<s:submit/>
> 		</s:form>
> 	</body>
> </html>



--
This message was sent by Atlassian Jira
(v8.20.10#820010)