2017-02-22 119 views
0

У меня возникла проблема с вызовом сеанса в моем файле 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) 
... 

Благодарим за помощь!

ответ

2

Используйте одинарные кавычки

"<%=request.getSession().getAttribute('basket')%>" 

Или использовать

'<%=request.getSession().getAttribute("basket")%>' 
+0

Большое спасибо. Теперь он работает с использованием второго. –