これをきちんと説明できればと思います。Spring を使用して、Liferay のポートレットを開発しています。ピンボードシステムです。そのため、特定のピンボード エントリの詳細を示すビュー (Jsp) があり、その ID が指定されています。さらに、ユーザーが現在見ているピンボード エントリに新しいコメントを追加するための AddCommentController へのリンクがあります。AddCommentController は、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 つのボタンがあります。以下は、対応する URL の 2 つのジェネレーターです。
<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 を参照)、ピンボード エントリの詳細ビューの ActionResponse st に渡します。エントリを再度読み込んで表示できます。
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 をセッションに保存し、そこから取得することで、この問題を解決しました。ただし、セッションを使用せずに別の解決策を持っている人がいるかどうかを尋ねたかった. 1つあると確信しています。
ありがとう、
ジュリ