【问题标题】:Unable to Submit form In struts 2 when using validations使用验证时无法在struts 2中提交表单
【发布时间】:2013-09-01 09:18:09
【问题描述】:

过去几个小时我一直面临一个问题,即每当我在应用程序中使用验证时,我都会在服务器端得到空值。

我的动作文件看起来像这样:

@ParentPackage("interceptions")
@InterceptorRefs({  
    @InterceptorRef("loggingStack")  
})
@Results({@Result(name="login",location="login.layout",type="tiles")})
public class LoginAction extends ActionSupport implements ModelDriven{
    UpUser user = new UpUser();
    String customField;
    @Validations(requiredFields={@RequiredFieldValidator(type=ValidatorType.SIMPLE,fieldName="customField",message="YOU")})   
    @Action(value="/login",results={
            @Result(name="success",location="secure.layout",type="tiles")})
    public String execute() {
        if(user.getUserScreenName()==null)
            return "login";
        System.out.println(userBo.verifyUser(user));
        return "success";
    }
    public Object getModel(){
        return user;
    }
    @VisitorFieldValidator(message="")  
    public UpUser getUser() {
        return user;
    }

    public void setUser(UpUser user) {
        this.user = user;
    }
    public String getCustomField() {
        return customField;
    }
    public void setCustomField(String customField) {
        this.customField = customField;
    }

}

在我的 struts.xml 中,我将拦截器定义为:

<package name="interceptions" extends="struts-default" namespace="/">
<result-types>
  <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
   <interceptors>
            <interceptor name="mylogging" 
                class="com.kiosk.lab.interceptor.LoggingInterceptor">
            </interceptor>
            <interceptor-stack name="loggingStack">
                <interceptor-ref name="mylogging" />
                <interceptor-ref name="validation">
    <param name="validateAnnotatedMethodOnly">true</param>
    <param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
                  <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>

            </interceptor-stack>
        </interceptors>

</package>

我通过它发送数据的 JSP 是:

<s:submit cssClass="loginButton"/>

现在我不确定这个问题,但是,我什至从我的操作中删除了 ActionSupport 并以两种方式添加和测试它,但没有运气。其次,如果我在我的 struts.xml 中注释掉拦截部分并从我的操作中删除验证标记,那么一切正常。否则服务器端的 customField 值为 null。

更新:

在几个答案之后,它可以很好地验证值,因为 Java 中的所有值都变为 null 并且它显示了实际的错误消息。但是,我仍然面临着类似的问题,即它没有从 JSP 提交值。因为,它总是为空,并且不断发布相同的验证错误消息。

【问题讨论】:

    标签: jsp validation struts2 interceptor struts2-convention-plugin


    【解决方案1】:

    您需要在下面添加,以便可以运行 defaultStack 中定义的验证拦截器

    <interceptor-ref name="defaultStack" />
    

    【讨论】:

    • 使用 config-browser 插件调试您的应用程序并查看验证是否在拦截器列表中
    • 谢谢@Alireza,但它仍然没有给我从jsp到java的值
    • 您也确定工作流拦截器吗?您的代码中似乎没有使用这个?!
    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多