2013-06-04 3 views
0

Я работаю с SpringMVC3.2 и JSP, и я пытаюсь отобразить информацию о пользователе. Но у меня есть проблема, чтобы отобразить его на странице JSP.JSTL не может получать данные с сервера

Вот мой контроллер и JSP-страница:

@Controller 
@RequestMapping("/map") 
public class EventDataController { 

    private Logger log = LoggerFactory.getLogger(EventDataController.class); 

    @Autowired EventDataService eventDataService; 
    @Autowired UserService userService; 

    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView index() { 

     ModelAndView mv = new ModelAndView("devicemap"); 

     UserDetails sessionUser = SecurityUtils.currentUserDetails(); 
     User user = userService.findUser(sessionUser.getUsername()); 
     log.info("user==>" + user); 
     if (user==null){ 
      mv.addObject("error", "Cannot find user."); 
     } else { 
      mv.addObject("user", user); 
       } 
     return mv; 
    } 

} 

devicemap.JSP 

<span class="alert" id="userInfo"> 
    <c:choose> 
    <c:when test="${!empty user}"> 
     ${user.userId} 
    </c:when> 
    <c:otherwise> 
     User not found 
    </c:otherwise> 
    </c:choose> 
</span> 


applicationContext.xml 

    <!-- ViewResolver for JSP --> 
    <bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

При проверке объекта пользователя в контроллере, то есть пользовательские данные и devicemap.jsp в WEB-INF/страниц.

Что я сделал не так? Любая помощь будет оценена по достоинству.

+0

Он работал, когда я изменил имя ключа в ModelAndView на любой другой, а не на «пользователь». Является ли «пользователь» зарезервированным ключевым словом в JSTL? – sunghun

+0

Я не думаю, что 'user' является ключевым словом JSTL. После того, как вы изменили имя ключа, попробовали ли вы снова его вернуть в 'user'? Если он работает и ваш сервер «Tomcat», я думаю, причина в том, что файл 'jsp' был кэширован в папке' work'. Не могли бы вы попробовать и дать некоторую обратную связь? –

ответ

1

Если я не ошибаюсь, условие проверки «пользователя» неверно.

Вы должны использовать

<c:when test="${not empty user}"> 

или

<c:when test="${user ne null}"> 

Надеется, что это помогает вам. :)

+0

Спасибо, но пользователь был пуст, когда я использовал только $ {user}. – sunghun

-1

Попробуйте добавить JstlView к вашему InternalResourceViewResolver.

<bean id="viewResolver" 
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
     value="org.springframework.web.servlet.view.JstlView"/> 
    <property name="prefix"> 
     <value>/WEB-INF/pages/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

Это обеспечит правильную оценку выражений EL в вашем JSP.

+0

Это делается автоматически ... также JstlView просто содержит некоторые сведения о локализации. –

+0

Спасибо, ребята. Я согласен с @Pavel. У меня нет проблем, когда я использую выражение JSTL на любой странице, кроме моего вопроса. – sunghun

1

Ну, по моему мнению, вы допустили ошибку в синтаксисе JSTL, поэтому используйте для печати данные или просто следуйте ниже.

<C:if test="${!empty user}"> 


</c:if> 

или вы тоже можете это сделать.

<c:when test="${not empty user}"> 
    </c:when> 

или вы также можете это сделать.

<c:when test="${!empty user}"> 
    </c:when> 

попробуйте это, и ваш прогон будет коротким.

Смежные вопросы