Validation 如何在用户提交了某些内容时验证表单(使用Struts2)
我正在开发一个非常简单的Struts2应用程序,我发现了一个奇怪的问题(我相信很容易解决): 当我访问directoly登录url时,它会显示带有以下错误的登录表单(用户名和密码文本字段):Validation 如何在用户提交了某些内容时验证表单(使用Struts2),validation,struts2,Validation,Struts2,我正在开发一个非常简单的Struts2应用程序,我发现了一个奇怪的问题(我相信很容易解决): 当我访问directoly登录url时,它会显示带有以下错误的登录表单(用户名和密码文本字段): Name field is required Password is required 该字段为空,因为这是用户第一次进入,所以我想告诉Struts2验证系统不要验证,除非用户提交带有用户名和密码的登录表单。我肯定我忽略了什么或者忘记了什么 Login.java操作代码: package actions.
Name field is required
Password is required
该字段为空,因为这是用户第一次进入,所以我想告诉Struts2验证系统不要验证,除非用户提交带有用户名和密码的登录表单。我肯定我忽略了什么或者忘记了什么
Login.java操作代码:
package actions.access;
import actions.base.BaseAction;
import data.Webuser;
public class Login extends BaseAction {
private Webuser user;
public String execute() {
if (user != null) {
session = this.getSession();
if (session.get("user-logged") == null ) {
session.put("user-logged", user.getId());
}
}
return SUCCESS;
}
public void validate() {
if (user != null) {
Webuser realUser = services.getWebuserByNickname(user.getNickname());
if (realUser.getPass().equals(user.getPass())) {
user.setId(realUser.getId());
} else {
addFieldError("user.nickname", "Nickname or password are wrong");
}
}
}
public Webuser getUser() {
return user;
}
public void setUser(Webuser user) {
this.user = user;
}
}
Login-validation.xml代码:
<field name="user.nickname">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Login name is required</message>
</field-validator>
</field>
<field name="user.pass">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Password is required</message>
</field-validator>
</field>
真的
需要登录名
真的
密码是必需的
任何形式的帮助都将不胜感激。
提前感谢。您需要两个操作
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
对于第二个,您可以定义验证。您需要一个重定向到login.jsp的操作和另一个处理登录过程和验证的操作。
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
在第一个动作中,不要写任何东西,只需设置result=success
public class IndexAction extends ActionSupport
{
public String execute() throws Exception
{
return SUCCESS;
}
}
Struts.xml中的条目如下所示:
<action name="login" class="com.test.web.LoginAction">
<result name="input">/pages/login.jsp</result>
<result name="success" >/pages/welcome.jsp</result>
</action>
<action name="index" class="com.test.web.IndexAction">
<result name="success">/pages/login.jsp</result>
</action>
/页面/login.jsp
/pages/welcome.jsp
/页面/login.jsp
您需要一个操作重定向到login.jsp,另一个操作处理登录过程和验证。
在第一个动作中,不要写任何东西,只需设置result=success
public class IndexAction extends ActionSupport
{
public String execute() throws Exception
{
return SUCCESS;
}
}
Struts.xml中的条目如下所示:
<action name="login" class="com.test.web.LoginAction">
<result name="input">/pages/login.jsp</result>
<result name="success" >/pages/welcome.jsp</result>
</action>
<action name="index" class="com.test.web.IndexAction">
<result name="success">/pages/login.jsp</result>
</action>
/页面/login.jsp
/pages/welcome.jsp
/页面/login.jsp
避免此问题的一种方法是,在web.xml文件中有一个欢迎文件列表条目。这应该指向您的登录页面。一旦你启动你的应用程序,这个登录页面就会打开,不需要做任何动作和验证
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
Login.jsp
启动服务器后,您可以通过以下格式提供url来访问应用程序
“”此处8080-是默认的HTTP端口,在您的情况下可能会有所不同。
ApplicationContext-是应用程序的上下文
我认为其他方法也可以。避免这个问题的一个方法是,在web.xml文件中有一个欢迎文件列表条目。这应该指向您的登录页面。一旦你启动你的应用程序,这个登录页面就会打开,不需要做任何动作和验证
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
Login.jsp
启动服务器后,您可以通过以下格式提供url来访问应用程序
“”此处8080-是默认的HTTP端口,在您的情况下可能会有所不同。
ApplicationContext-是应用程序的上下文
我认为其他方法应该可以很好地工作。您需要的是使用相同的操作来显示表单,然后(提交后)处理表单
public class LoginAction {
@SkipValidation
public String execute() throws Exception {
return INPUT; // shows the form
}
public void validate() {
// do your validations here...
}
public String submit() throws Exception {
// process the form
// redirect somewhere
}
}
表单应该提交到“login!submit”(这是动态方法调用,它调用
submit()
方法)。您不需要使用两个操作来执行此操作。您需要的是使用相同的操作来显示表单,然后(提交后)处理表单
public class LoginAction {
@SkipValidation
public String execute() throws Exception {
return INPUT; // shows the form
}
public void validate() {
// do your validations here...
}
public String submit() throws Exception {
// process the form
// redirect somewhere
}
}
表单应该提交到“login!submit”(这是动态方法调用,它调用
submit()
方法)。您不需要使用两个操作。您不需要两个操作,使用两个操作会添加不必要的代码。您不需要两个操作,使用两个操作会添加不必要的代码。使用两个操作会添加不必要的代码,并且无法很好地扩展。每次需要处理表单时,您都会得到2个action类。啊!使用两个动作会添加不必要的代码,并且不能很好地扩展。每次需要处理表单时,您都会得到2个action类。啊!