Comment puis-je dire à Struts2 de ne pas valider un formulaire la première fois qu'il s'affiche?
Je suis en train d'essayer d'apprendre Struts2.
J'ai créé un formulaire, une action visant à traiter un fichier XML pour le valider, et les actions dans le struts.xml.
Chaque fois que le formulaire s'affiche, même la première fois, Struts2 essaie de valider, de sorte que les erreurs sont affichées avant que l'utilisateur avait une chance de le remplir.
Voici le code correspondant:
<!-- /WebContent/views/user/login.jsp -->
<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ 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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Page</title>
<s:head />
</head>
<body>
<h1>Login Page</h1>
<s:form action="executeUser">
<s:textfield key="userBean.userName" />
<s:password key="userBean.password" />
<s:submit align="center" />
</s:form>
</body>
</html>
<!-- /src/struts.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="overviewofstruts" extends="struts-default">
<action name="loginUser" class="hu.flux.user.LoginUserAction" method="execute">
<result name="input">/views/user/login.jsp</result>
</action>
<action name="executeUser" class="hu.flux.user.LoginUserAction" method="execute">
<result name="input">/views/user/login.jsp</result>
<result name="success">/views/user/login_thankyou.jsp</result>
</action>
</package>
</struts>
///src/hu/flux/user/LoginUserAction.java
package hu.flux.user;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginUserAction extends ActionSupport {
private User userBean;
public void setUserBean(User userBean) { this.userBean = userBean; }
public User getUserBean() { return userBean; }
public String login() throws Exception { return this.execute(); }
public String execute() throws Exception { return SUCCESS; }
public String input() throws Exception { return INPUT; }
}
<!-- ///src/hu/flux/user/LoginUserAction-validation.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<validator type="requiredstring">
<param name="fieldname">userBean.userName</param>
<message>Username is required.</message>
</validator>
<validator type="requiredstring">
<param name="fieldname">userBean.password</param>
<message>Password is required.</message>
</validator>
Que dois-je faire ou changer pour obtenir struts pour afficher le formulaire de la première heure sans se plaindre sur tous les champs vides?
source d'informationauteur Brian Kessler
Vous devez vous connecter pour publier un commentaire.
Yee, je sais ce problème. D'habitude je suis en suivant le plan de travail.
Marque
execute
avecorg.apache.struts2.interceptor.validation.SkipValidation
Donc d'abord passer ignore méthode de validation. Mais entrée sera validé.
L' @SkipValidation solution de contournement va le faire, mais Struts validation a déjà intégré les règles sur le moment où il va (ou pas) -- c'est mieux d'apprendre les règles de sorte que vous n'avez pas besoin de configuration supplémentaire. Il est également intéressant d'apprentissage de sorte que vous ne sont pas confondus, lors de la validation n'est pas exécuter lorsque vous en avez besoin...
Donc, réponse courte: si vous modifiez ce
à ce
(notez le paramètre de méthode) -- allons résoudre le problème (mettre en œuvre la méthode dans votre classe d'action).
Réponse longue: Ouvert struts-default.xml à la racine de l'struts-core fichier JAR et naviguer autour. La Validation est assurée par la "validation" de l'intercepteur. Ensuite, il y a un autre intercepteur appelé "flux de travail" qui gère automatiquement montrant le "input" résultat si la validation échoue, regardez donc ces ensemble.
Trouver et vous verrez ceci:
La excludeMethods se réfère à l'action de paramètre de méthode, et est exactement ce que vous essayez de faire.
Vous pouvez également configurer votre propre intercepteur de la pile (calqué sur le défaut, ou l'un des autres exemples) et définir d'autres exclus méthodes. Les caractères génériques sont pris en charge dans les noms.