[SPRING] 자바, 스프링 프레임 워크 MVC - 방향 전환
SPRING자바, 스프링 프레임 워크 MVC - 방향 전환
나는 스프링 프레임 워크 3을 사용하고있다. 기사에 의견을 게시 할 수있는 양식이 있습니다. 양식이 제출되면 오류가 있는지 점검합니다. 오류가없는 경우 컨트롤러는 문자열을 반환합니다.
"redirect:entryView/"+comment.getEntryId();
그리고 모든 것은 괜찮습니다.
하지만 오류가있는 경우 컨트롤러가 반환하면
"redirect:entryView/"+comment.getEntryId();
오류는 spring-form.tld 태그와 함께 양식에 표시되어야합니다.
<form:errors path="author"/>
그러나 표시된 오류가 없습니다! 돌아 오려고 할 때
"entryView/"+comment.getEntryId();
Redirect : prefix가 없다면 /rus/WEB-INF/jsp/entryView/8.jsp로 가고 HTTP Status 404가 있습니다.하지만 http://example.com/rus/entryView/8로 가야합니다. 즉 코멘트와 관련된 기사와 양식이있는 페이지!
이것은보기 해결 자입니다 :
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
어떻게해야합니까?
제어기 나머지 :
@Controller
public class CommentController {
private RusService rusService;
private CommentValidator commentValidator;
@Autowired
public CommentController(RusService rusService,CommentValidator commentValidator){
this.rusService = rusService;
this.commentValidator = commentValidator;
}
@RequestMapping(value="/addComment",method=RequestMethod.POST)
public String addComment(Comment comment,BindingResult result){
commentValidator.validate(comment, result);
if(result.hasErrors()){
return "redirect:entryView/"+comment.getEntryId();
}else{
rusService.postComment(comment);
return "redirect:entryView/"+comment.getEntryId();
}
}
}
해결법
-
==============================
1.
의 오류 표시는 다음과 같이 작동합니다. 의 오류 표시는 다음과 같이 작동합니다.redirect : url을 사용할 때 Spring이 클라이언트의 브라우저에 302 Found를 보내어 브라우저가 새로운 URL로 두 번째 요청을하도록합니다.
리디렉션 된 페이지가 다른 요청 / 응답 개체 집합과 함께 작동하기 때문에 원래의 오류는 손실됩니다.
새 페이지를 표시하기 위해 리디렉션하려는 페이지에 "오류"를 전달하는 가장 간단한 방법은 두 번째 페이지의 컨트롤러가 볼 수있는 세션 개체에 메시지를 추가하는 것입니다 (또는 URL에 인수를 전달하여).
-
==============================
2.새 메모를 표시하는보기로 리디렉션하지 않고 "메모 추가"양식의 페이지보기를 사용해보십시오.
새 메모를 표시하는보기로 리디렉션하지 않고 "메모 추가"양식의 페이지보기를 사용해보십시오.
if(result.hasErrors()) { return "commentForm"; }
메소드 서명에 @ModelAttribute Comment를 추가해야 할 수도 있습니다 ...
-
==============================
3.bkent314가 맞습니다.
bkent314가 맞습니다.
이 두 가지 방법을 살펴 보아라. 도메인 개체를 양식 GUI 개체 (FolderCreateCommand)에서 분리하지만 그건 내 스타일입니다. 그리고이 경우에는 string 대신 return을 위해 ModelAndView를 사용합니다. 왜냐하면 모델에 대한 완전한 제어권을 가지고 있기 때문입니다.
@RequestMapping(method = RequestMethod.GET, params = "form") public ModelAndView createForm() { return modelAndViewForCreate(new FolderCreateCommand(..default values..)); } @RequestMapping(method = RequestMethod.POST) public ModelAndView create(@Valid FolderCreateCommand folderCreateCommand, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return modelAndViewForCreate(folderCreateCommand); } Folder folder = this.folderService.createFolder(folderCreateCommand); return redirectToShow(folder); } private ModelAndView modelAndViewForCreate(FolderCreateCommand folderCreateCommand) { ModelMap uiModel = new ModelMap(); uiModel.addAttribute("folderCreateCommand", folderCreateCommand); uiModel.addAttribute("parentFolders", this.folderDao.readAll()); return new ModelAndView("folders/create", uiModel); } private ModelAndView redirectToShow(Folder folder) { return new ModelAndView(new RedirectView("/folders/" + folder.getId(), true)); }
from https://stackoverflow.com/questions/6780756/java-spring-framework-mvc-redirection by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 415 REST 템플릿을 통해 json 파일을 보내는 동안 지원되지 않는 미디어 유형 (0) | 2019.05.29 |
---|---|
[SPRING] 중첩 예외가 java.lang.IllegalArgumentException : 관리되지 않는 유형 인 경우 : class (0) | 2019.05.28 |
[SPRING] "userDao"라는 bean이 정의되지 않았습니다. (0) | 2019.05.28 |
[SPRING] 콩 인스턴스화 전에 스프링 부팅 응용 프로그램의 모든 활성 속성을 기록하는 방법? (0) | 2019.05.28 |
[SPRING] 일반 또는 특정 DAO가 여러 테이블의 정보로 배달을 기록합니까? (0) | 2019.05.28 |