我正在开发一个非常简单的Struts2应用程序,我得到这个奇怪的(并且很容易解决,我确定)问题:
当我访问directoly到登录网址时,会显示包含以下错误的登录表单(用户名和密码文本字段):
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>
任何形式的帮助将不胜感激。 提前谢谢。
答案 0 :(得分:1)
您要找的是使用相同的操作来显示表单,然后(提交后)处理表单。
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()
方法)。您不需要为此使用两个操作。
答案 1 :(得分:0)
你需要两个动作。
您的登录操作会重定向到您的login.jsp。
处理登录过程的LoginSubmit Action。
对于第二个,您可以定义验证。
答案 2 :(得分:0)
您需要一个重定向到login.jsp的操作和另一个处理Login进程和验证的操作。 在第一个动作中,不要写任何东西,只需设置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>
答案 3 :(得分:0)
避免此问题的一种方法是,在您的web.xml文件中有一个欢迎文件列表条目。这应该指向您的登录页面。一旦你启动你的应用程序,这个登录页面就会打开,不做任何动作和验证。
<welcome-file-list>
<welcome-file>Login.jsp</welcome-file>
</welcome-file-list>
启动服务器后,您可以通过以下格式提供网址来访问您的应用程序
“http://localhost:8080/ApplicationContext”
这里8080是默认的HTTP端口,在你的情况下它可以是不同的
ApplicationContext-是应用程序的上下文。
我认为其他事情应该可以正常工作。