0

gae の struts2 でシンプルなアプリを試していますが、フォームの送信で問題に直面しています。

struts.xml 設定

<package name="auth" extends="struts-default" namespace="/auth">
    <default-interceptor-ref name="defaultStack"/>
    <action name="signup" class="signup" method="signup">
      <result name="success">/auth/signup.jsp</result>
    </action>
    <action name="postSignup" class="signup" method="create">
      <result name="input">/auth/signup.jsp</result>
    </action>
    <action name="signupConfirm" class="signup" method="signupConfirm"></action>

    <action name="resendCode" class="signup" method="resendCode"/>
</package>

スプリングを使用してアクションをロードしています。

URL /auth/signup.html にアクセスすると、適切なサインアップ ページが表示されます。フォームの検証が失敗した場合は、フォームを送信した後(アクションの検証メソッドでこれを行っています)。同じjspに戻ります。ここでの主な問題は、validate メソッドに fielderror を追加し、フォームに struts タグを使用したにもかかわらず、エラーが表示されないことです。

 @Override
  public void validate() {

    if(!StringUtil.isValidUserName(userForm.getUserName())){
      addFieldError("userForm.userName", "Invalid username format");
    }else {
      TutorUser user = this.userBc.getUserByUserName(userForm.getUserName());
      if(user!=null){
        addFieldError("userForm.userName", "Username already exist. Please choose a different one.");
      }
    }
    if(!StringUtil.isEmail(userForm.getEmail())){
      addFieldError("userForm.email", "Invalid email provided");
    }
    if(StringUtil.isBlank(userForm.getPassword1()) || StringUtil.isBlank(userForm.getPassword2()) ||
        !userForm.getPassword1().equals(userForm.getPassword2())) {
      addFieldError("userForm.password2", "Passwords do not match");
    }
  }

また、このページから /auth/signup.html をもう一度押すと、このエラーが発生します-

Problem accessing /auth/signup.html. Reason:

    No result defined for action com.tutorial.action.auth.SignUpAction and result input

サインアップフォームのみを表示するため、「サインアップ」アクションのconfに「入力」は必要ありません。また、「postSignup」メソッドを除いて@SkipValidation、それぞれに注釈を追加しました。私はstruts2が初めてです。struts1 からの移行。これには助けが必要です。また、Struts 構成をより適切に整理するにはどうすればよいですか? ありがとう

jspはこちら

  <s:form action="postSignup" cssClass="well" namespace="/auth" method="POST">
    <fieldset>
      <div class="control-group">
        <label class="control-label" for="userName">UserName</label>
        <div class="controls">
          <s:textfield cssClass="input-large" id="userName" name="userForm.userName"/>
          <span class="help-inline">Choose a username</span>
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="password1">Password</label>
        <div class="controls">
          <s:password cssClass="input-large" id="password1" name="userForm.password1"/>
          <span class="help-inline">Enter your Password</span>
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="password2">Confirm Password</label>
        <div class="controls">
          <s:password cssClass="input-large" name="userForm.password2" id="password2"/>
          <span class="help-inline">Confirm above password</span>
        </div>
      </div>
      <div class="control-group">
        <label class="control-label" for="email">Email Address</label>
        <div class="controls">
          <s:textfield cssClass="input-large" id="email" name="userForm.email"/>
          <span class="help-inline">Enter your Email Address</span>
        </div>
      </div>
      <div class="form-actions">
        <s:submit name="action" id="action" value="SignUp" cssClass="btn btn-primary"/>
      </div>

    </fieldset>
  </s:form>
4

1 に答える 1

2

認証ページに再度アクセスしてもフォーム エラーが表示される場合は、Spring Bean のデフォルトの「シングルトン」スコープを使用していることを意味します。アクションは「プロトタイプ」スコープ、つまりリクエストごとに作成する必要があります。

フィールド エラーの追加以外に関連するものが表示されないため、フィールド エラーの問題に対処することはできません。アクションと JSP 情報の両方を含める必要があります。

構成ファイルの「より良い編成」に関しては、それ以上の情報がなければ、あなたが何を意味するのかを知ることは不可能です. 整理方法は?あなたが持っているものの何が問題になっていますか?何がいいですか?

于 2012-08-13T21:38:43.850 に答える