Java Struts2 上的 addFieldError 未在字段上显示错误

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18481871/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 02:01:56  来源:igfitidea点击:

addFieldError on Struts2 not displaying error on the fields

javastruts2

提问by Shameer

Hi I m very new to struts2. from some books and websites I got this example. In action class it use validate method to check logic. The method is called bcoz from the print statements. But the error is not shown near to the fields. Jst help me

嗨,我对 struts2 很陌生。从一些书籍和网站我得到了这个例子。在动作类中,它使用验证方法来检查逻辑。该方法在打印语句中被称为 bcoz。但是错误没有显示在字段附近。请帮帮我

Index.jsp

索引.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
 pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>Home</title>
</head>
<body>
<s:form action="LoginAction ">
<s:textfield name="username" label="Username" />
<s:textfield name="password" label="Password" />
<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>

Struts.xml

Struts.xml

<package name="default" extends="struts-default">
        <action name="LoginAction" class="org.shammu.struts2.actions.LoginAction">
                <result name="success">/welcome.jsp</result>
                <result name="input">/index.jsp</result>
        </action>
        <action name="emptypassthrough">
                <result>index.jsp</result>
        </action>


</package>

LoginAction.java

登录操作.java

 package org.shammu.struts2.actions;

 import org.shammu.struts2.beans.LoginBean;

 import com.opensymphony.xwork2.ActionSupport;

 @SuppressWarnings("serial")
 public class LoginAction extends ActionSupport{

private String username;
private String password;
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public String execute(){
    LoginBean login = new LoginBean();
    login.setPassword(password);
    login.setUsername(username);
    if (getUsername().equals("abcd")) {
        return "success";
    } else {
        return "input";
    }

}

@Override
public void validate() {
    if (username.length() < 3) {
        System.out.print("user err ok");
        this.addFieldError(username, "Username Empty Pls provide");

    }
    if (password.length() < 3) {
        System.out.print("Pass err ok");
        this.addFieldError(password, "Password Empoty provride one pkls");
    }

}
 }

I m not considering execute method. I want jst the error msg printed near to fields... Help

我不考虑执行方法。我想要在字段附近打印错误消息... 帮助

回答by Ankur Lathi

To display fielderroryou need to add <s:fielderror />in your jsp.

要显示,fielderror您需要添加<s:fielderror />到您的 jsp 中。

It Render field errors if they exists. Specific layout depends on the particular theme. The field error strings will be html escaped by default.

如果存在,则呈现字段错误。具体布局取决于特定主题。默认情况下,字段错误字符串将被 html 转义。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>Home</title>
</head>
<body>
<s:form action="LoginAction ">

<s:textfield name="username" label="Username" /><s:fielderror fieldName="username"/>
<s:textfield name="password" label="Password" /><s:fielderror fieldName="password"/>

<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>

回答by Aleksandr M

You are not correctly using addFieldErrormethod. The first parameter in that method is a name of the field. In your case it should be "username".

您没有正确使用addFieldError方法。该方法中的第一个参数是字段的名称。在你的情况下它应该是"username".

addFieldError("username", "Username Empty Pls provide");