1

私は白髪の原因となるSpringWebFlowアプリを持っています。検証が成功した場合に私が達成しようとしているのは、異なるデータで同じビューを表示することです。これは機能します。ただし、無効なデータが入力された場合は、前のビューを表示したいのですが、誤った値が事前に入力され、上記のエラーを修正する方法をユーザーに通知するエラーメッセージが表示されます。ただし、検証が成功したかどうかに関係なく、アプリは内部の処理を実行しon-renderます。値が無効であるため、アプリがクラッシュします。on-render検証が成功した場合にのみ処理を実行するにはどうすればよいですか?

私のビューステート設定は次のようになります。

<view-state id="mine" model="myModel">
    <var name="myModel" class="com.examplelMyModel" />
    <on-entry>
         <set name="foo" value="bar" />
    </on-entry>
    <on-render>
        <set name="requestScope.stuff" value="stuffService.loadStuff( ... )" />
        <set name="viewScope.otherStuff" value="otherStuffService.loadOtherStuff( requestScope.stuff, myModel.a, myModel.b )" />
    </on-render>
    <transition on="reloadMine" validate="true"/>
</view-state>

私のバリデーターは次のようになります。

public class MyModelValidator{

  ...

    public void validateMine(MyModel myModel, ValidationContext context) {
        Locale currentLocale = LocaleContextHolder.getLocale();

        MessageContext messages = context.getMessageContext();
        DateTime a= new DateTime(myModel.getA());
        DateTime a = new DateTime(myModel.getB()); 
        DateTime now = new DateTime();

        if(a.isAfter(now) || b.isAfter(now)){
            messages.addMessage(new MessageBuilder().error().defaultText(messageSource.getMessage("ohno", null, currentLocale)).build());
        }
    }
}

}

4

1 に答える 1

2

on-renderは、ページが実際にユーザーにストリーミングされているときに呼び出されます。検証エラーを表示できるようにするには、ページを再レンダリングする必要があります。そうすると、renderが呼び出されます。これらの2つのセットを入場タグの中に入れることはできませんか?

于 2010-10-26T14:08:56.180 に答える