나는 이것을 올바르게 설명 할 수 있기를 바란다. Spring을 사용하여 Liferay 용 포틀릿을 개발 중입니다. 그것은 핀 보드 시스템입니다. 그래서 나는 id (id)를 가진 특정 pinboard 엔트리의 세부 사항을 보여주는 view (jsp)를 가지고있다. 또한 사용자가 현재보고있는 핀 보드 항목에 새 주석을 추가하는 AddCommentController 링크가 있습니다. AddCommentController 봄의 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");
}
}
뷰 두 가지가 있습니다 버튼을 클릭하고 저장하고 취소합니다. 다음은 URL에 따른 두 개의 생성자입니다. AddCommentController의 onSubmitAction에서
<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>
는 I 파라미터 (상기 첫번째 actionURL 참조)가 ActionResponse의 s.t.로 전달 독출 핀 보드 항목의 상세보기에서 항목을 다시로드하여 표시 할 수 있습니다.
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