Spring3 MVC - как правильно внедрить CRUD на тот же контроллер? - PullRequest
0 голосов
/ 18 ноября 2011


Я пытаюсь создать простой CRUD-контроллер и просматривать его с помощью Spring mvc.
Я могу:
Получить список документов Загрузить документ Удаленный документ


Если яхотел бы отправить запрос, используя FORM,
Как мне реализовать Download Document?
Должен ли я использовать для каждого документа?Другое дело - правильно ли я использую инфраструктуру MVC?

<html>
<body>  

<!-- the list: -->
<c:forEach items="${documentList}" var="documentRow"> 
    <Generate table here>

<!-- upload part -->
<form:form modelAttribute="uploadDocument"  method="post"  enctype="multipart/form-data">
    <form:input path="fileData" type="file"/>
    <input type="hidden" id="actUploadocument" name="action" value="uploadDocument" />
</form:form>

<!-- delete part -->
<form:form method="post"  enctype="multipart/form-data">
    <input type="hidden" id="documentId" value="" />
    <input type="hidden" id="actUploadocument" name="action" value="deleteDocument" />
</form:form>

</body>
</html>

Контроллер CRUD?

@Controller
@RequestMapping("/documents")
public class DocumentsController 
{ 
@Autowired
private MainService mainService;

@RequestMapping(method = RequestMethod.GET)
public String listDocuments(Model model) {
    List<Document> docs = mainService.getAllDocuments();        
    model.addAttribute("documentList",docs);
    model.addAttribute(new UploadDocument());
    return "admin/documents";
}

@RequestMapping(method = RequestMethod.POST , params="action=uploadDocument")  
public String uploadDocument(UploadDocument uploadDocument){
    savedocument(uploadDocument);
    return "redirect:/admin/documents.do";
}

@RequestMapping(method = RequestMethod.POST , params="action=removeDocument")  
public String removeDocument(@RequestParam(value="documentId", required=true) String documentId){
    savedocument(documentId);
    return "redirect:/admin/documents.do";
}

@RequestMapping(method = RequestMethod.POST , params="action=downloadDocument")  
public String downloadDocument(@RequestParam(value="documentId", required=true) String documentId,
                            HttpServletRequest request,HttpServletResponse response ) {
    writeDocToResponse(documentId,response);
    return null;
}

1 Ответ

0 голосов
/ 18 ноября 2011

По сути, все, что вам нужно, чтобы открыть диалог загрузки файла. - это набор свойств ответа для идентификации HTTPresponce как attachment .Например:

response.reset();
response.setContentType(getYourFileContentType());
response.setHeader("Content-Disposition","attachment; filename=\""+getYourFileName()+"\"");

Затем вы можете вызвать сервисный метод для потоковой передачи файла.

...