복붙노트

[SPRING] 왜 내 JSF + Spring 웹 애플리케이션은 HTML 페이지 대신 JSF 소스 코드를 출력합니까?

SPRING

왜 내 JSF + Spring 웹 애플리케이션은 HTML 페이지 대신 JSF 소스 코드를 출력합니까?

저는 JSF와 Spring Framework에 익숙하지 않습니다. 그리고 저는 그것들을 함께 사용하는 방법을 찾으려고 노력하고 있습니다. 현재 문제는 응용 프로그램이 JSF 파일을 해석하지 않고 출력한다는 것입니다. 다음은 관련성이 있다고 생각되는 코드의 일부입니다.

dispatcher-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 / pages / 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>

문제가있는 아이디어는 무엇입니까? 이 코드가 전혀 의미가 있습니까? 저는 사실을 잘 알고 있습니다. 아마도 그것은 완전히 짜증나고, 나는 여기가 기분이 좋을 것이고, 그것이 왜 낫지 만, 어떻게하면 더 좋게 만들 수 있는지 기뻐할 것입니다. 감사 :)

편집 : 문제의 근원 인 것으로 보이는 코드 조각을 추가하고 원래 질문에 (물론) 포함되지 않은 코드 조각을 추가합니다.

을 포함한다.

<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>

제대로 작동하려면 Faces Servlet의 URL 패턴을 * .xhtml로 변경해야했습니다.

해결법

  1. ==============================

    1.JSF 태그가 파싱되지 않았다면 요청 URL이 web.xml에서 정의 된대로 FacesServlet의 url-pattern과 일치하지 않는다는 것을 의미합니다. 즉, 모든 JSF 사건에 책임이 있습니다. 요청 URL이 FacesServlet의 url-pattern과 일치하는지 확인해야합니다. 예를 들어 * .jsf 인 경우 http://example.com/context/page.jsf에서 호출해야하므로 http://example.com/context/page.xhtml이 아닌 호출해야합니다.

    JSF 태그가 파싱되지 않았다면 요청 URL이 web.xml에서 정의 된대로 FacesServlet의 url-pattern과 일치하지 않는다는 것을 의미합니다. 즉, 모든 JSF 사건에 책임이 있습니다. 요청 URL이 FacesServlet의 url-pattern과 일치하는지 확인해야합니다. 예를 들어 * .jsf 인 경우 http://example.com/context/page.jsf에서 호출해야하므로 http://example.com/context/page.xhtml이 아닌 호출해야합니다.

    그렇지만 Spring을 사용하지 않는 이래로 Spring이 그림에 어떻게 들어 맞는 지 확신 할 수 없지만, JSF를 작동 시키려면 FacesServlet을 통해 요청을 전달해야한다. 봄은 일을해야한다.

  2. from https://stackoverflow.com/questions/2853759/why-does-my-jsf-spring-web-application-output-jsf-source-code-instead-of-inter by cc-by-sa and MIT license