2013-12-15 3 views
1

Я новичок в Spring MVC/JSP world. Извините, если ниже проблема очевидна,Переход к JSP

У меня есть карта Map<BigInteger, String> reports = new HashMap<>();, которая должна быть передана JSP с контроллера. Содержание карты будет как этот

reports.put(new BigInteger("101"), "type1"); 
reports.put(new BigInteger("102"), "type2"); 
reports.put(new BigInteger("103"), "type3"); 

От контроллера Spring MVC Я передаю эту карту, как показано ниже:

ModelAndView mav = new ModelAndView("view"); 
mav.addObject("reports", reports); 

Но когда я пытаюсь получить доступ к этому в View.jsp с ниже скриптлета: -

<% String a1 = request.getAttribute("reports").get(new BigInteger("101")); %> 

Но это дает мне следующее исключение:

PWC6199: Generated servlet error: 
cannot find symbol 
    symbol: method get(java.math.BigInteger) 
    location: class java.lang.Object 

То же исключение, если я пытался получить значение, используя выражение, как показано ниже: -

<%= request.getAttribute("reports").get(new BigInteger("101")) %> 

Любая помощь будет принята с благодарностью.

ответ

2

request.getAttribute("reports") возвращается ссылка Object не Map, вы должны гипса это

вам лучше пойти на JSTL, чтобы избежать Java-кода в шаблоне вида

2

Как указана Jigar Joshi, вам нужно бросить, чтобы получить доступ к карте в JSP

<%= ((Map<BigInteger, String>) request.getAttribute("reports")).get(new BigInteger("101")) %> 

Однако, как заявил также, что будет чище использовать выражение EL. Поскольку на карту вводится BigInteger, вам нужно будет преобразовать ключи в String или Long, чтобы они были accessible to EL.

С String ключа:

reports.put("101", "type1"); 

в JSP вы можете использовать:

<c:out value="${reports['101']}"/> 

или с ключом Long:

reports.put(101L, "type1"); 

вы можете использовать:

<c:out value="${reports[101]}"/> 
Смежные вопросы