0

一部のページでは、アプリケーションの Struts 検証を無視するシナリオがあります。ページの流れがあります。ユーザーは 1 つのページを完了し、[次へ] ボタンをクリックして別のページに進みます。[次へ] をクリックすると、必須要素の検証チェックが行われ、正常に機能しています。

同じページに「戻る」ボタンがあり、そのボタンをクリックすると、ユーザーは前のページに移動します。必須要素が入力されていない場合でも、ユーザーは前のページに移動できるようにする必要があります。しかし、私の場合、必須チェックは停止しています。

私はStruts Validation Frameの作業を使用しています。ページにAdminWorkFlow-Validation.xml必要なすべての検証を含むファイルがあります。

[戻る] ボタンをクリックしたときに検証チェックを無視する方法。

Struts 2.0.11 および

<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
4

1 に答える 1

1

私は自分の問題の解決策を見つけました。独自のバリデーターを作成しました。2つのことを処理します。

  1. 「戻る」ボタンをクリックしたときに検証を無視する
  2. ウィザード インデックス (静的) とページ インデックス (ページごとに設定) を提供することにより、同じアクションで複数の一連のフォームを管理します。サンプルコード:

    /**

    • クラスは、必須文字列をチェックするために使用されます。
    • このクラスは、ページのフローで使用できます
    • 同じ Action クラスと話す

    */

    public class MandatoryStringFieldValidator extends FieldValidatorSupport {

         // Holds the Current Page Index, value picked from JSP(Front End)
    private String pageIndex = "0";
    // Holds the Wizard Page which is set in the xxx-validation.xml
    private String wizardPage = "0";
    // Holds a Value  by which I can identify if the action is back button click
    //If true validation is ignored. This is also taken from the JSP(Front End)
    private String backClicked;
    
    public String getBackClicked() {
        return backClicked;
    }
    
    public void setBackClicked(String backClicked) {
        this.backClicked = backClicked;
    }
    
    public String getPageIndex() {
        return pageIndex;
    }
    
    public void setPageIndex(String pageIndex) {
        this.pageIndex = pageIndex;
    }
    
    public String getWizardPage() {
        return wizardPage;
    }
    
    public void setWizardPage(String wizardPage) {
        this.wizardPage = wizardPage;
    }
    
    @Override
    public void validate(Object object) throws ValidationException {
        final String fieldName = getFieldName();
        final Object value = getFieldValue(fieldName, object);
        if(!"0".equals(pageIndex)){
            Integer pageIndexValue = (Integer) getFieldValue(pageIndex, object);
            if (pageIndexValue != null) {
                backClicked = (String) getFieldValue(backClicked, object);
                if(StringUtils.isNotBlank(backClicked) && Boolean.valueOf(backClicked)){
                    pageIndexValue = pageIndexValue - 1;
                }
                pageIndex = String.valueOf(pageIndexValue);
            }
        }
        if(wizardPage.equals(pageIndex)) {
            if (!(value instanceof String)) {
                addFieldError(fieldName, object);
                return;
            }
            String strValue = (String) value;
            if (StringUtils.isBlank(strValue)) {
                addFieldError(fieldName, object);
            }
        }
    }
    

    }

Validation.xml

<validators>
    <validator name="requiredStringValidator"   
             class="com.client.validation.MandatoryStringFieldValidator"/>
</validators>

最後に -validation.xml に

<?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">

<validators>
    <field name="serviceMot.driverName">
        <field-validator type="requiredStringValidator" short-circuit="true">
                        <param name="pageIndex">pageIndex</param>
            <param name="backClicked">backClicked</param>
            <param name="wizardPage">1</param>
            <message>${getText('page1.mandatoryName')}</message>
        </field-validator>
</validators>

注意してください : プロダクション コードがあり、ファイル内の名前も変更されているため、コードの一部を削除しました。

于 2014-05-21T08:55:07.620 に答える