Использование PrettyFaces 3.3.1-SNAPSHOT

я загрузил версию 3.3.1-SNAPSHOT, чтобы сделать общий URL-адрес для этого сообщения:

Pretty Faces: общее сопоставление URL-адресов

моя конфигурация выглядит следующим образом:

мой веб.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app
<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.0
               http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.0.xsd"&gt;

    <url-mapping id="generic">
    <pattern value="/*" />
    <view-id value="/faces/$1.xhtml" />
    </url-mapping>

</pretty-config>
5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app
<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.0
               http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.0.xsd"&gt;

    <url-mapping id="generic">
    <pattern value="/*" />
    <view-id value="/faces/$1.xhtml" />
    </url-mapping>

</pretty-config>
5.xsd&quot; id="WebApp_ID" version="2.5"> <display-name>myapp</display-name> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:META-INF/spring/applicationContext.xml classpath:META-INF/spring/applicationSecurity.xml </param-value> </context-param> <!-- Activating the Expression Language --> <context-param> <param-name>com.sun.faces.expressionFactory</param-name> <param-value>com.sun.el.ExpressionFactoryImpl</param-value> </context-param> <context-param> <param-name>javax.faces.PROJECT_STAGE</param-name> <param-value>Development</param-value> </context-param> <welcome-file-list> <welcome-file>users</welcome-file> </welcome-file-list> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>server</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> <context-param> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> <!-- Spring Security --> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class> org.springframework.web.filter.DelegatingFilterProxy </filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter> <filter-name>Pretty Filter</filter-name> <filter-class>com.ocpsoft.pretty.PrettyFilter</filter-class> </filter> <filter-mapping> <filter-name>Pretty Filter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <servlet> <servlet-name>Resource Servlet</servlet-name> <servlet-class>com.icesoft.faces.webapp.CompatResourceServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Resource Servlet</servlet-name> <url-pattern>/xmlhttp/*</url-pattern> </servlet-mapping> <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>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> <url-pattern>/icefaces/*</url-pattern> </servlet-mapping> </web-app>

мой довольно-config.xml:

<pretty-config xmlns="http://ocpsoft.com/prettyfaces/3.3.0"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://ocpsoft.com/prettyfaces/3.3.0
               http://ocpsoft.com/xml/ns/prettyfaces/ocpsoft-pretty-faces-3.3.0.xsd"&gt;

    <url-mapping id="generic">
    <pattern value="/*" />
    <view-id value="/faces/$1.xhtml" />
    </url-mapping>

</pretty-config>

следующая строка продолжает повторяться в терминале:

at com.ocpsoft.pretty.faces.config.annotation.WebClassesFinder.processDirectory(WebClassesFinder.java:183) at


person Mahmoud Saleh    schedule 13.10.2011    source источник
comment
Вы забыли указать тип/сообщение исключения в вопросе. Публикация только одной строки трассировки стека бесполезна.   -  person BalusC    schedule 13.10.2011
comment
@BalusC, это странно, консоль заполнена только этой строкой, когда я перехожу к файлу журнала приложения, не могу найти исключение, посоветуйте?   -  person Mahmoud Saleh    schedule 13.10.2011
comment
Очевидно, он попал в бесконечный цикл. Я бы сообщил об этом как об ошибке ребятам из PrettyFaces.   -  person BalusC    schedule 13.10.2011
comment
@BalusC, я уже сообщил им, так что можете ли вы предложить какую-либо другую библиотеку, такую ​​​​как prettyFaces, для общего сопоставления URL-адресов, как я пытался сделать?   -  person Mahmoud Saleh    schedule 13.10.2011


Ответы (1)


Мика,

Это не то, что PrettyFaces поддерживает с помощью конструкции сопоставления URL-адресов, вместо этого вы должны использовать собственное правило перезаписи:

<rewrite match="/(.*)" substitute="/faces/$1.xhtml" />

Однако рассмотрите влияние такого правила (аналогично тому, которое вы определили выше). Конечно, будет бесконечный цикл, потому что «*» также соответствует «/faces/XXX.xhtml». Вам нужно сделать шаблон соответствия более строгим.

<rewrite match="^/(.*)(?<!\.xhtml)$" substitute="/faces/$1.xhtml" />

Я также предлагаю вам прочитать о регулярных выражениях, потому что "/*" не является регулярным выражением, которое будет делать то, что вы думаете: http://ocpsoft.com/opensource/guide-to-regular-expressions-in-java-part-2/#lookaround

Однако, если вам нужен инструмент для перезаписи URL-адресов, который был разработан специально для выполнения подобных задач, я предлагаю вам взглянуть на OCPsoft Rewrite: http://ocpsoft.com/rewrite/, гораздо более мощный (но более сложный в использовании) инструмент для перезаписи URL-адресов.

Это позволяет вам делать такие вещи:

       .addRule(Join.path("/{page}")
                .to("/pages/{page}.xhtml")
                .when(Resource.exists("/pages/{page}.xhtml"))
                .where("page").matches("(?!RES_NOT_FOUND)[^/]+"))
person Lincoln    schedule 25.11.2011