Настройка FacesServlet, чтобы избавиться от.расширение xhtml
я Login.xhtml
и Home.xhtml
. Я настроил шаблон url в web.xml
следующим образом
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>Login.xhtml</welcome-file>
</welcome-file-list>
когда я запускаю весь проект, страница входа URL
вот так http://localhost:8080/fran/Login.xhtml
здесь fran
это имя моего проекта..
однако, я хотел бы, чтобы это было http://localhost:8080/fran/Login/
вместо http://localhost:8080/fran/Login.xhtml
.
как я могу этого достичь? Можно ли настроить <url-pattern>
для каждой страницы, чтобы избавиться от .xhtml
продление?
решить
как BalusC упоминалось ниже в комментарии... OmniFaces FacesViews является удивительным. Вот шаги, которые я сделал:
- место
omnifaces-1.5.jar
на . -
добавить ниже код
web.xml
:<context-param> <param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name> <param-value>/*.xhtml</param-value> </context-param>
это все в конфигурации. Он отлично работает.
2 ответов
если ваша единственная причина, чтобы избавиться от .xhtml
расширение, то есть различные способы в зависимости от используемой версии JSF.
JSF 2.3+
JSF 2.3 предлагает новый API для сбора всех представлений:ViewHandler#getViews()
. Объедините это с ServletRegistration#addMapping()
на ServletContextListener
как ниже.
@FacesConfig
@WebListener
public class ApplicationConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
addExtensionLessMappings(event.getServletContext(), FacesContext.getCurrentInstance());
}
private void addExtensionLessMappings(ServletContext servletContext, FacesContext facesContext) {
servletContext
.getServletRegistrations().values().stream()
.filter(servlet -> servlet.getClassName().equals(FacesServlet.class.getName()))
.findAny()
.ifPresent(facesServlet -> facesContext
.getApplication()
.getViewHandler()
.getViews(facesContext, "/", ViewVisitOption.RETURN_AS_MINIMAL_IMPLICIT_OUTCOME)
.forEach(view -> facesServlet.addMapping(view))
);
}
}
эффективно, это oneliner. Источник:окончательное руководство по JSF.
JSF 2.2 -
использовать OmniFaces FacesViews. Он предлагает способ нулевой конфигурации для достижения этого путем размещения файлов представления в . В противном случае, если вы не собираетесь изменять структуру проекта и хотите сохранить файлы представления в обычном месте и по-прежнему использовать URL-адреса без расширения, то необходимо добавить следующий параметр контекста:
<context-param>
<param-name>org.omnifaces.FACES_VIEWS_SCAN_PATHS</param-name>
<param-value>/*.xhtml</param-value>
</context-param>
если вы не хотите использовать OmniFaces, а хотите создать свой собственный, просто посмотрите на источник код в OmniFaces. Это с открытым исходным кодом под лицензией Apache 2.0. Это только не проявляющаяся.
посмотри prettyfaces: довольно URL-адреса для Javaserver Faces ,
посмотреть 2. Создайте pretty-config.пример xml на главной странице
и взгляните на Глава 2. Начало Работы