Я пытаюсь создать представление в формате PDF по этой tutorialSpring MVC: Понимание точки зрения связывания
У меня есть controller
:
@Controller
public class UserController {
@Autowired
UserDao userDao;
@RequestMapping(value = "/user_pdf", method = RequestMethod.GET, headers = "Accept=application/pdf")
public ModelAndView usersPdf(@ModelAttribute("model") ModelMap model) {
return new ModelAndView("pdfView", "listBooks", userDao.getAll());
}
}
У меня есть servlet configuration
:
<context:component-scan base-package="ua.epam.spring.hometask" />
<context:annotation-config/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<!--<property name="prefix" value="/WEB-INF/ftl"/>-->
<property name="suffix" value=".ftl"/>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/"/>
</bean>
<bean id="PdfRevenueSummary"
class="ua.epam.spring.hometask.view.UserPdfView">
</bean>
И У меня есть pdf builder
:
@Component
public class UserPdfView extends AbstractPdfView {
protected void buildPdfDocument(Map model,
Document document, PdfWriter writer, HttpServletRequest req,
HttpServletResponse resp) throws Exception {
User user = (User) model.get("command");
Paragraph header = new Paragraph(new Chunk("Generate Pdf USing Spring Mvc",FontFactory.getFont(FontFactory.HELVETICA, 30)));
Paragraph by = new Paragraph(new Chunk("Author " + user.getFirstName() + " " + user.getLastName(),FontFactory.getFont(FontFactory.HELVETICA, 20)));
document.add(header);
document.add(by);
}
}
Конечно, я сделал соответствующий <servlet-mapping>
в web.xml
Вопросы:
Как обязательные работы? Из учебника я вижу, что теперь есть связь от
Controller
доPDF view
Пожалуйста, помогите мне узнать, как исправить мой код. Я вижу
404 error code
сейчас, и когда я удалитьheaders = "Accept=application/pdf"
я вижу, что пытается решить ее сFreeMarkerViewResolver
'ModelAndView' вставляет объект модели в представление шаблона, поэтому разрешает доступ к шаблону для привязки к данным модели. Что вы не понимаете по этому поводу? –
У меня также есть 'FreeMarkerViewResolver'. Я не понимаю, как 'Spring' решает, какой' viewresolver' выбрать –
Все, что заканчивается расширением FTL, переходит в первый viewResolver, что соответствует совпадениям в конфигурации сервлета –