1

私はstruts2を学んでいて、addFieldErrorメッセージを表示することでいくつかの問題に直面しています..何も表示されません..プロジェクトを実行してuserIDフィールドを空白のままにすると、validateメソッドに入り、isEmptyメソッドの条件を満たすことさえありますが、表示されませんエラーメッセージ.. isEmpty メソッドにsopステートメントを入れて、入っているかどうかを確認します..ステートメントがコンソールに出力され、URLが../MyStruts/validation.actionに変更され、どこにもエラーがなく、何も起こりませんさらに遠く..

誰かが私が間違っているところを教えてもらえますか..ここに私のコードがあります..

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>


 <package name="validate" extends="struts-default">
 <action name="validation"  class="com.staction.DataAction">
 <result name="success">/success.jsp</result>
 <result name="input">/form1.jsp</result>
 <result name="error">/error.jsp</result>
  </action>  </package>

   </struts>

form1.jsp

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"   pageEncoding="ISO-8859-1"%>
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@ taglib prefix="s" uri="/struts-tags" %>

  <html>
 <head>

</head>
<s:form action="validation">
<h1>
<s:textfield label="UserName" name="userID" />
<s:password label="password" name="password" />
</h1>
<s:submit />
</s:form>
<s:a href="forget">forget password </s:a>
    </html>

アクションクラス…

    package com.staction;

     import org.apache.commons.lang3.StringUtils;

     import com.opensymphony.xwork2.ActionSupport; 
     import com.opensymphony.xwork2.ModelDriven;

    public class DataAction extends ActionSupport implements ModelDriven<User> {

private static final long serialVersionUID = 1L;
User user;
DataCheck dc;
public DataAction() {
    user=new User();
    dc=new DataCheck();
}

@Override
public void validate() {
    if(StringUtils.isEmpty(user.getUserID()))
    {
        System.out.println("hellp");
        addFieldError("user.userID", "wtf!!!!");
    }

}
public String execute()
{
    System.out.println("user.userID");
    /*      if(dc.isValid(user))
{
    return SUCCESS;
}*/
    return ERROR;
}

@Override
public User getModel() {
    // TODO Auto-generated method stub
    return user;
}

}

そして最後にUserクラス..

package com.staction;

import org.apache.commons.lang3.StringUtils;

import com.opensymphony.xwork2.ActionSupport;

public class User{
String userID;
String password;

public String getUserID() {
    return userID;
}
public void setUserID(String userID) {
    this.userID = userID;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
   }
4

3 に答える 3

2

あなたのフォーム:

<s:textfield label="UserName" name="userID" />

あなたのフィールドエラー:

addFieldError("user.userID", "wtf!!!!");

違いを見ます?

また:

  • コードが実際にはそのようにランダムにフォーマットされていないことを願っています。とても読みにくいです。
  • Userクラスが拡張されるのはなぜActionSupportですか? アクションでない場合は、基本のデフォルト アクションを拡張しないでください。無意味であり、誤解を招きます。
  • アクションに意味のある名前を付けることを検討してください。ほとんどのアクションは「データ アクション」です。
  • 例を投稿するときは、コメントアウトされたコードや特定の質問に直接関係のないものを親切に削除してください。
于 2013-02-13T21:09:51.587 に答える
0

Dave Newton の応答に加えて、「ユーザー」を削除する必要があります。Struts2 が getModel を使用して適切なオブジェクトを自動的に取得するように addFieldError で設定するか、getter を使用してオブジェクトにアクセスできるように、Action でオブジェクト ユーザーの set/get メソッドを追加する必要があります。

于 2014-09-20T01:32:15.077 に答える