jsf-2prettyfaces

How to pass parameters to view-id in Pretty-Faces?


I want to pass some variable values to the view-id node in the pretty-config.xml configuration file. For sample:

I want to do something like that:

 <url-mapping id="allReports">
        <pattern value="/report/#{type}" />
        <view-id value="/pages/report/#{type}.xhtml" />
    </url-mapping>

But I got the error:

java.lang.IllegalArgumentException: java.net.URISyntaxException: Illegal character in fragment at index 18: http://localhost/#{type}.xhtml

Someone know how to do that?

Thank you.


Solution

  • As the Prettyfaces main website says, you have to do the following one:

    <url-mapping id="view-user">
        <pattern value="/user/{username}" />
        <view-id value="/user/view.xhtml" />
    </url-mapping>
    

    This is the equivalent to /user/view.xhtml?username=yourParam. If you type this url /user/Administrator, you receive in your view a request parameter which name is username and value is Administrator. Just follow this convention.

    If you want to inherit from a parent id, just write a mapping for each type. For instance you can write:

    <url-mapping parentId="view-user" id="admins">
       <pattern value="/admin/#{user}" /> 
       <view-id value="/user/admins/view.xhtml" />
    </url-mapping>
    
    <url-mapping parentId="view-user" id="externals">
        <pattern value="/external/#{user}" /> 
        <view-id value="/user/externals/view.xhtml" />
    </url-mapping>
    

    Also you have dynamic view id's, but I think it's not possible to concat them with a static String piece. To use them in the way you want you should take the param from the request and process the complete destination url in your bean.