これを正しく説明できることを願っています。私はSpringを使ってLiferay用のポートレットを開発しています。それはピンボードシステムです。だから私は特定のピンボードエントリの詳細を示すビュー(Jsp)を持っています。さらに、ユーザが現在見ているピンボードエントリに新しいコメントを追加するためのAddCommentControllerに行くリンクがあります。 AddCommentControllerは、SpringのSimpleFormControllerを拡張し、また、それに接続されているバリデータを持っていますValidatorを使ってSpring SimpleFormControllerにリクエストパラメータを保存する
<bean id="addCommentController" class="com.lifepin.controllers.AddCommentController" parent="lifePinControllerTemplate">
<property name="formView" value="addComment" />
<property name="successView" value="viewEntryDetail" />
<property name="validator" ref="commentValidator"/>
</bean>
バリは本当に簡単で、次のようになります。
public class CommentValidator implements Validator {
public boolean supports(Class clazz) {
return clazz.equals(Comment.class);
}
public void validate(Object obj, Errors validationError) {
ValidationUtils.rejectIfEmptyOrWhitespace(validationError, "content", "err.content.empty", "This value is required");
}
}
今、ユーザーは自分のコメントを入力することができますビューは、2つを持っていますボタンを押して、保存してキャンセルします。ここには2つのジェネレータがURLに対応しています。
<portlet:actionURL var="actionUrl">
<portlet:param name="action" value="addComment"/>
<portlet:param name="pinboardEntryId" value="${param.pinboardEntryId}"/>
</portlet:actionURL>
<portlet:renderURL var="cancelUrl">
<portlet:param name="action" value="viewPinboardEntry"/>
<portlet:param name="pinboardEntryId" value="${param.pinboardEntryId}"/>
</portlet:renderURL>
私は、パラメータを読み出すAddCommentControllerのonSubmitActionで
(上記第一actionURLを参照)、S。T. ActionResponseに渡しますピンボード・エントリの詳細ビューでは、エントリを再度ロードして表示することができます。
public class AddCommentController extends SimpleFormController{
...
@Override
protected void onSubmitAction(ActionRequest request, ActionResponse response, Object command, BindException bindException)
throws Exception {
long pinboardEntryId = PortletRequestUtils.getLongParameter(request, ParameterNameConstants.PINBOARDENTRY_ID, -1);
...
}
...
}
これは、検証エラーが発生した場合を除いて、すべて正常に動作します。その場合、URLから「pinboardEntryId」パラメータが緩和され、PortletRequestまたはレスポンスがないため、CommentValidatorでそのパラメータを読み取ってレスポンスに再度渡す方法はありません。
今のところ私はセッションにIDを格納し、そこから取得することでこの問題を解決しました。しかし、あなたの中にはセッションを使わなくても別の解決策があるのかどうか尋ねたいと思っていました。私は確信している。再び呼び出されるshowForm(..)
検証エラーで
おかげで、
樹里
私はすでにプロジェクトを終了しましたが、ヒントのためにthxです。 – Juri