Ich habe ein funktionierendes Apache Struts 6.0-Kontaktformular, das einen benutzerdefinierten Validator für das Sicherheitscodefeld verwendet. Der benutzerdefinierte Validator funktionierte nach dem Upgrade von Apache Struts 6.0 auf 7.0 nicht mehr. Nach dem Absenden des Formulars ist folgender Fehler aufgetreten:
Code: Select all
Messages:
Cannot invoke "org.apache.struts2.validator.ValidatorFactory.lookupRegisteredValidatorType(String)" because "this.validatorFactory" is null
File: org/apache/struts2/validator/AnnotationValidationConfigurationBuilder.java
Line number: 620
Entwicklungsumgebungen: Windows 11 Pro, Apache Tomcat 11, Netbeans IDE 21
Hier sind die Dateien in meinem Projekt:
Datei 1: src/main/java/com/mydomain/struts/actions/ContactAction.java
Code: Select all
package com.mydomain.struts.actions;
import org.apache.struts2.ActionSupport;
import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.validator.annotations.CustomValidator;
import org.apache.struts2.validator.annotations.EmailValidator;
import org.apache.struts2.validator.annotations.RequiredStringValidator;
import org.apache.struts2.validator.annotations.StringLengthFieldValidator;
public class ContactAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name, message, email, securityCode;
public String getName() {
return name;
}
@RequiredStringValidator(message = "Name is required.")
@StringLengthFieldValidator(
minLength = "5",
maxLength = "40",
message = "Your name must be from 5 to 40 characters."
)
@StrutsParameter()
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
@RequiredStringValidator(message = "Message is required.")
@StringLengthFieldValidator(
minLength = "10",
maxLength = "255",
message = "The message must be from 10 to 255 characters."
)
@StrutsParameter()
public void setMessage(String message) {
this.message = message;
}
public String getEmail() {
return email;
}
@RequiredStringValidator(message = "Email address is required.")
@EmailValidator(
message = "The email address you entered is not valid."
)
@StrutsParameter()
public void setEmail(String email) {
this.email = email;
}
public String getSecurityCode() {
return securityCode;
}
@RequiredStringValidator(message = "Security code is required.")
@CustomValidator(type = "securitycodevalidator")
@StrutsParameter()
public void setSecurityCode(String securityCode) {
this.securityCode = securityCode;
}
@Override
public String execute() {
return SUCCESS;
}
}
Datei 2: src/main/java/com/mydomain/struts/validator/SecurityCodeValidator.java
Code: Select all
package com.mydomain.struts.validator;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.ValidationException;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.validator.validators.FieldValidatorSupport;
public class SecurityCodeValidator extends FieldValidatorSupport {
...
@Override
public void validate(Object o) throws ValidationException {
boolean isSecurityCodeCorrect = validateSecurityCode(...);
if (! isSecurityCodeCorrect) {
addFieldError(getFieldName(), o);
}
}
}
Datei 3: src/main/webapp/WEB-INF/classes/validators.xml
Datei 4: src/main/webapp/contact.jsp
Ich habe ein funktionierendes Apache Struts 6.0-Kontaktformular, das einen benutzerdefinierten Validator für das Sicherheitscodefeld verwendet. Der benutzerdefinierte Validator funktionierte nach dem Upgrade von Apache Struts 6.0 auf 7.0 nicht mehr. Nach dem Absenden des Formulars ist folgender Fehler aufgetreten:
[code]Messages:
Cannot invoke "org.apache.struts2.validator.ValidatorFactory.lookupRegisteredValidatorType(String)" because "this.validatorFactory" is null
File: org/apache/struts2/validator/AnnotationValidationConfigurationBuilder.java
Line number: 620
[/code]
Entwicklungsumgebungen: Windows 11 Pro, Apache Tomcat 11, Netbeans IDE 21
Hier sind die Dateien in meinem Projekt:
Datei 1: src/main/java/com/mydomain/struts/actions/ContactAction.java
[code]package com.mydomain.struts.actions;
import org.apache.struts2.ActionSupport;
import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.validator.annotations.CustomValidator;
import org.apache.struts2.validator.annotations.EmailValidator;
import org.apache.struts2.validator.annotations.RequiredStringValidator;
import org.apache.struts2.validator.annotations.StringLengthFieldValidator;
public class ContactAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private String name, message, email, securityCode;
public String getName() {
return name;
}
@RequiredStringValidator(message = "Name is required.")
@StringLengthFieldValidator(
minLength = "5",
maxLength = "40",
message = "Your name must be from 5 to 40 characters."
)
@StrutsParameter()
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
@RequiredStringValidator(message = "Message is required.")
@StringLengthFieldValidator(
minLength = "10",
maxLength = "255",
message = "The message must be from 10 to 255 characters."
)
@StrutsParameter()
public void setMessage(String message) {
this.message = message;
}
public String getEmail() {
return email;
}
@RequiredStringValidator(message = "Email address is required.")
@EmailValidator(
message = "The email address you entered is not valid."
)
@StrutsParameter()
public void setEmail(String email) {
this.email = email;
}
public String getSecurityCode() {
return securityCode;
}
@RequiredStringValidator(message = "Security code is required.")
@CustomValidator(type = "securitycodevalidator")
@StrutsParameter()
public void setSecurityCode(String securityCode) {
this.securityCode = securityCode;
}
@Override
public String execute() {
return SUCCESS;
}
}
[/code]
Datei 2: src/main/java/com/mydomain/struts/validator/SecurityCodeValidator.java
[code]package com.mydomain.struts.validator;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.ValidationException;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.validator.validators.FieldValidatorSupport;
public class SecurityCodeValidator extends FieldValidatorSupport {
...
@Override
public void validate(Object o) throws ValidationException {
boolean isSecurityCodeCorrect = validateSecurityCode(...);
if (! isSecurityCodeCorrect) {
addFieldError(getFieldName(), o);
}
}
}
[/code]
Datei 3: src/main/webapp/WEB-INF/classes/validators.xml
[code]
[/code]
Datei 4: src/main/webapp/contact.jsp
[code]
Contact Form
Security code:
....
[/code]