【问题标题】:struts2 action mapping configurationstruts2 动作映射配置
【发布时间】:2012-08-10 04:10:06
【问题描述】:

我正在 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>

我正在使用 spring 来加载动作。

当我点击 url /auth/signup.html 时,我得到了正确的注册页面。现在提交表单后,如果表单验证失败(我正在通过我的操作中的 validate 方法执行此操作)。它让我回到同一个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>

【问题讨论】:

    标签: java struts2 struts2-namespace


    【解决方案1】:

    如果您再次点击 auth 页面并且仍然看到表单错误,这意味着您正在使用 Spring bean 的默认“singleton”范围。操作应该是“原型”范围,即按请求创建。

    字段错误的问题无法解决,因为除了添加字段错误之外,我看不到任何与之相关的内容。您必须同时包含操作和 JSP 信息。

    关于配置文件的“更好的组织”,如果没有进一步的信息,就不可能知道你的意思。怎么组织?你所拥有的有什么问题?你喜欢什么?

    【讨论】:

    • 感谢 'scope=prototype' 工作。我已经包含了jsp。通过组织,我的意思是就像在 struts1 中一样,我每个动作只有一个 conf。我想通过保持我的uri相同来实现相同的目标,即'/auth/signup',并且应该根据一些参数调用不同的方法。或者可能像 get 的 'auth/signup' 和 post 的 'auth/signup/create' 。这可能吗?
    • @Shwetanka 您可以使用通配符映射,在这种情况下可能没问题。在不了解您的设置的情况下,我猜您正在使用“简单”主题或手动主题,因为您的 HTML 在默认的“xhtml”主题下会很疯狂。 “简单”主题不包含错误消息(因为它很简单)。
    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多