У меня возникла проблема с вызовом сеанса в моем файле jsp. Я пытаюсь создать проект Spring и Hibernate, который включает сеанс с использованием конфигурации на основе Java (без конфигурации xml). Ниже приведен снимок того, что я делаю.Почему вызов сеанса на jsp возвращает ошибку?
Это один из моих контроллера:
@Controller
@RequestMapping(value = "/sp")
public class ELibraryController {
@RequestMapping(value = "/form")
public String index(ModelMap m) {
m.put("basket", new Basket());
return "form";
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/addbasket", method = RequestMethod.POST)
public String addbasket(@ModelAttribute("basket") Basket b, HttpSession session) {
List<Basket> lst = (List<Basket>) session.getAttribute("basket");
if(lst == null) {
lst = new ArrayList<>();
lst.add(b);
}else {
boolean flag = false;
for(Basket basket : lst) {
if(basket.getId()==b.getId()) {
basket.setQuantity(basket.getQuantity()+1);
flag = true;
break;
}
}
if(flag==false)
lst.add(b);
}
session.setAttribute("basket", lst);
session.setAttribute("total", lst);
return "basket";
}
public int getNoBooksBorrowed(List<Basket> lst) {
int total = 0;
for(Basket basket : lst) {
total += (basket.getQuantity());
}
return total;
}
}
Это мой form.jsp
...
<body>
<f:form modelAttribute="basket" action="addbasket" method="POST">
ID: <f:input path="id"/><br/>
Book Name: <f:input path="name"/><br/>
Quantity: <f:input path="quantity"/><br/>
<input type="submit" value="Add to Basket"/>
</f:form>
</body>
...
где е родник формы.
Это мой basket.jsp
...
<table border="1" cellpadding="10px" width="100%" style="border-collapse: collapse;">
<c:forEach items="<%= request.getSession().getAttribute("basket") %>" var="b">
<tr>
<td>${b.id}</td>
<td>${b.name}</td>
<td>${b.quantity}</td>
<td>
Remove
</td>
</tr>
</c:forEach>
<tr>
<td colspan="5">
Total Book/s Borrowd: <%= request.getSession().getAttribute("total") %>
</td>
</tr>
</table>
...
где с является ядро JSTL.
Поскольку я использую конфигурацию на основе Java. Ниже класс инициализатор:
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Это мой класс AppConfig.java
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.org.elibrary")
public class AppConfig extends WebMvcConfigurerAdapter{
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
registry.viewResolver(viewResolver);
}
}
После запуска, если я просматриваю к , страница отображается правильно, но когда я нажимаю Добавить в корзину кнопка, браузер указывает на http://localhost:8080/Elibrary/sp/addbasket, но возвращает следующую ошибку:
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/Elibrary] threw exception [/WEB-INF/views/basket.jsp (line: 13, column: 24) Attribute value request.getSession().getAttribute("basket") is quoted with " which must be escaped when used within the value] with root cause
org.apache.jasper.JasperException: /WEB-INF/views/basket.jsp (line: 13, column: 24) Attribute value request.getSession().getAttribute("basket") is quoted with " which must be escaped when used within the value
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
...
Благодарим за помощь!
Большое спасибо. Теперь он работает с использованием второго. –