3

xml ベースの検証を使用しています。

問題:

ユーザーが入力するすべてのフィールドが空白であるため、ページが最初にロードされたときに入力フォームで検証を実行したくありません。フォームを登録して新しい学生を追加するとします。ボタンをクリックすると実行されるはずです。

注: ボタンのクリック時に検証を行っても、同じ URL を保持したい。新しいフォームの URL はhttp://localhost:8000/Struts2_Spring_Crud/student/add、検証が失敗した場合でも、URL が同じである必要があります。

struts.xml

<default-action-ref name="list"/>
        <action name="list" class="com.myapp.actions.StudentAction" method="getAllStudents">
            <!--<interceptor-ref name="myInterceptor"/>-->
            <result name="success" type="tiles">/student.list.tiles</result>
        </action>

    <!--<action name="add">
                <result type="tiles">/student.edit.tiles</result>
            </action>-->
            <action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
                <result name="success" type="redirectAction">list</result>
                <result name="input" type="tiles">/student.edit.tiles</result>
            </action>

入力フォーム

<s:fielderror/>
    <s:form action="add" method="POST">

        <s:label name="name" value="Name *"/>
        <s:textfield name="student.name" value="%{student.name}"/>
        <s:fielderror fieldName="student.name"/>

        <s:label name="age" value="Age *"/>
        <s:textfield name="student.age" value="%{student.age}"/>

        <s:submit name="saveForm" value="#title"/>
    </s:form>

編集済み:この URLhttp://localhost:8000/Struts2_Spring_Crud/student/addから送信されたものよりも excludeMethods を追加するhttp://localhost:8000/Struts2_Spring_Crud/student/listと、追加フォームが表示されません。

 <action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
            <interceptor-ref name="validation">
                <param name="excludeMethods">input,back,cancel,browse</param>
            </interceptor-ref>
            <result name="success" type="redirectAction">list</result>
            <result name="input" type="tiles">/student.edit.tiles</result>
        </action>
4

4 に答える 4

0

私はこれを行うために常に別のインジケーターを使用します:

JSP:

<s:form action="add">
    <s:hidden name="postBack" value="true"/>
    <%-- your fields --%>
</s:form>

アクション:

public String execute(){
    if(!postBack){
        return OPEN;
    } else if(!validate()) {
        return INPUT;
    } else {
        save();
        return SUCCESS;
    }
}

構成:

<action name="add" class="com.myapp.actions.StudentAction" method="insertOrUpdateStudent">
    <result name="success" type="redirectAction">list</result>
    <result name="input" type="tiles">/student.edit.tiles</result>
    <result name="open" type="tiles">/student.edit.tiles</result>
</action>
于 2012-10-07T21:05:08.353 に答える
0

fieldexpression validator http://struts.apache.org/2.x/docs/fieldexpression-validator.htmlを使用してid、たとえば隠しフィールドに基づいて条件付き検証を行うことができます。

于 2012-10-08T07:49:11.253 に答える
0

注釈ベースの検証を使用しています。私のstruts.xmlには

<interceptor-ref name="validation">
  <param name="validateAnnotatedMethodOnly">true</param>
</interceptor-ref>  

xml ベースの検証用に excludeMethods を追加してみてください。

<interceptor-ref name="validation">
  <param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>

検証インターセプターのドキュメントは次のとおりです。

于 2012-10-07T04:08:26.240 に答える