Почему мое веб-приложение JSF + Spring выводит исходный код JSF вместо интерпретированной HTML-страницы? - PullRequest
3 голосов
/ 18 мая 2010

Я новичок в JSF и Spring Framework и пытаюсь понять, как заставить их работать вместе. Моя текущая проблема заключается в том, что приложение выводит мои файлы JSF без их интерпретации. Вот некоторые фрагменты моего кода, которые, я считаю, могут быть уместны:

диспетчер-servlet.xml

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
        <props>
            <prop key="login.htm">loginController</prop>
        </props>
    </property>
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      p:prefix="/WEB-INF/pages/"
      p:suffix=".xhtml" />

<bean name="loginController" class="controller.LoginController" />

LoginController

public class LoginController extends MultiActionController {
 public ModelAndView login(HttpServletRequest request,
   HttpServletResponse response) throws Exception {
    System.out.println("LOGIN");
    return new ModelAndView("login");
}

WEB-INF / страницы / login.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <title>#{message.log}</title>
</h:head>
<h:body>
    <h:form>
        <h:outputLabel value="#{message.username}" for="userName">
            <h:inputText id="userName" value="#{User.name}" />
        </h:outputLabel>            
        <h:commandButton value="#{message.loggin}" action="#{User.login}" />
    </h:form>
</h:body>
</html>

Есть идеи, где может быть проблема? Этот код имеет какой-либо смысл вообще? Я хорошо осознаю тот факт, что это, вероятно, полностью отстой, и я буду рад здесь, ПОЧЕМУ это отстой и как сделать это лучше. Спасибо:)

РЕДАКТИРОВАТЬ: я добавляю кусок кода, который, кажется, корень проблемы, и который я (конечно) не включил в исходный вопрос:

web.xml

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>
<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.htm</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

URL-шаблон сервлета Faces должен был быть изменен на * .xhtml для правильной работы.

1 Ответ

2 голосов
/ 18 мая 2010

Если теги JSF не были проанализированы, то это просто означает, что URL-адрес запроса не соответствует url-pattern из FacesServlet, как определено в web.xml. Именно он отвечает за все эти события JSF. Вам необходимо проверить, соответствует ли URL запроса url-pattern из FacesServlet. Если это, например, *.jsf, то вам нужно вызвать его с помощью http://example.com/context/page.jsf, а не http://example.com/context/page.xhtml.

Я, однако, не уверен, как Spring вписывается в рисунок, поскольку я его не использую, но чтобы заставить JSF работать, вам действительно нужно сначала пропустить запрос через FacesServlet, а не через какой-то контроллер Spring. Весна должна сделать свое дело После этого .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...