Olá…
Estou iniciando com JSF…
E gostaria de saber como mapeamos o local onde as páginas JSF ficaram…
Por exemplo:
<context-param>
<param-name>javax.faces.DEFAULT_SUFFIX</param-name>
<param-value>.jspx</param-value>
</context-param>
Quando utilizo isto informo que todas minhas páginas que terminam com .jspx serão minhas páginas JSF…
Em Spring, informa-se também o PREFIX, onde eu costumo colocar em …"/WEB-INF/views/"…
Gostaria de fazer o mesmo em JSF…
Como faço para mapear para que minha aplicação identifique as páginas JSF que ficaram na pasta /WEB-INF/views/ … ??
O padrão é ler o diretório raiz, webapp …
Valeu!!!
A ideia seria encurtar a URL…
Tem este link de um outro colega do GUJ … http://www.guj.com.br/posts/list/89957.java
que esta com o mesmo problema…
Obrigado!
Vc não configura nada neste sentido com JSF. Vc será capaz de acessar quaisquer páginas q estiverem na raiz do seu projeto (web no netbeans, WebContent no Eclipse). Mas vc precisa configurar a FacesServlet:
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
O servlet-mapping determina como vc deve acessar as suas páginas JSF, pois se a url não casar com este pattern a FacesServlet não será executada. O uso do pattern *.xhtml ainda ajuda pelo fato de evitar q os usuários acessem os códigos fonte das páginas q tb devem ser xhtml. Mas esse pattern pde ser qualquer um outro q possa ser configurado ali. Por padrão o JSF2 procura por páginas com extensão xhtml, eu seja mesmo o pattern configurado seja *.jspx ele vai procurar p/ arquivos .xhtml na raiz do projeto. O JSF1.x por padrão procura p/ páginas .jsp.
Certo…
Então por exemplo…
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/WEB-INF/views/*</url-pattern>
</servlet-mapping>
é possível?
E acessar a URL … http://…/NomeDoPrj/pagina.xhtml
Sendo que a estrutura do meu diretório com as páginas JSF é:
src/main/webapp/web-inf/views/
…
Valeu dev.rafael!
Não! O servidor torna o diretório /WEB-INF e todo o seu conteúdo invisível, não sendo possível acessar urls como /WEB-INF/views/index.xhtml. Alguns framewors como o VRaptor usam colocar suas views dentro de desse diretório, mas isso um recurso específico do framework e não vai funcionar no JSF. O pattern especificado no servlet-mapping serve apenas p/ ativar o JSF. Por exemplo, digamos q vc configurou o seu servlet-mapping como este…
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
… isso significa q toda página JSF deve ser acessada como prefixo faces. Ou seja, se vc acessar a página index.xhtml pela url http://meusite.com/meuprog/faces/index.xhtml, o JSF não vai procurar por um arquivo index.xhtml dentro de um diretório faces, ele vai procurar por esse arquivo na raiz do projeto. Isso pq a parte /faces/ só está ali p/ ativar o JSF. Vc ainda pode acessar o arquivo index.xhtml pela url http://meusite.com/meuprog/index.xhtml mas neste caso o servidor vai devolver o arquivo sem processar as tags do JSF. O mesmo vale p/…
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.wow</url-pattern>
</servlet-mapping>
… o servidor não vai procurar por arquivos com a extensão .wow ele ainda vai procurar p/ arquivos com extensão .xhtml. Mesmo assim quando vc for acessar o arquivo index.xhtml vc precisará usar a url http://meusite.com/meuprog/index.wow p/ q o JSF seja executado. A url http://meusite.com/meuprog/index.xhtml continua sendo válida mas não executa o JSF. O mapeamento…
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Apenas resolve isso fazendo com q o JSF seja executado através da url q vc normalmente usaria p/ acessar aquele arquivo, além de impedir q o arquivo possa ser acessado de um modo q ele não seja processado pelo JSF, o q resultaria na apresentação do código-fonte desse arquivo ao usuário final e a uma possível brecha na segurança do seu aplicativo.
Entendido…
Então, não é possível eu colocar arquivos JSF no diretório src/main/webapp/WEB-INF/views
E acessar via URL: http://xxx/MeuPrj/página.jsf
Via alguma configuração JSF … ?
Pelo SPRING utilizo assim:
[code]<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</list>
</property>
</bean>[/code]
Obrigado !!
Não, os seus arquivo não podem estar dentro do diretório /WEB-INF. Eles devem estar em src/main/webapp/. Apartir dai vc é livre p/ criar qualquer estrutura de diretórios q vc quizer mas não pode colocar as suas views dentro de /WEB-INF. Se fize-lo o JSF não encontrará as suas views.