Apache Struts 7.0: „org.apache.struts2.validator.ValidatorFactory.lookupRegisteredValidatorType(String)“ kann nicht aufg
Posted: 05 Jan 2025, 12:41
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:
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
Datei 2: src/main/java/com/mydomain/struts/validator/SecurityCodeValidator.java
Datei 3: src/main/webapp/WEB-INF/classes/validators.xml
Datei 4: src/main/webapp/contact.jsp
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
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;
}
}
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);
}
}
}
Code: Select all
Code: Select all
Contact Form
Security code:
....