Beginner needs help with basic prettyfaces concepts

Splash Forums PrettyFaces Users Beginner needs help with basic prettyfaces concepts

This topic contains 7 replies, has 3 voices, and was last updated by  Christian Kaltepoth 6 years, 5 months ago.

Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #17819

    balteo
    Participant

    Hello,

    I have a bean that has the following URLMapping (bean for home page):

    “@URLMapping(id = “rootAction”, pattern = “/lang/#{accueilView.language}/”, viewId = “/accueil.jsf”)”

    I would like for my app to be able to handle the case when the user lands on the home page without having specified the “/lang/fr/” part of the url, i.e. he/she lands on http://www.example.com instead of http://www.example.com/lang/fr/

    How do I configure my URLMapping in order to handle that case?

    Thanks in advance,

    Julien.

    #20411

    Create a second mapping without the parameter.

    @URLMapping(id = "root", pattern = "/", viewId = "/accueil.jsf")

    #20412

    There are multiple ways to achieve something like this. One option is to use the Inbound-URL-Rewriting feature of PrettyFaces. Just add a rewrite rule to your pretty-config.xml like this:

    <rewrite match="/" substitute="/lang/fr/" redirect="301"/>

    If you want to have more control what language to set for the redirect, you could also use a regular URL mapping like this one (pseudo code):

    @URLMapping(id = "start", pattern = "/", viewId = "/something.jsf")
    public class StartPage {

    @Inject / @Autowired / something similar
    private AccueilViewBean accueilView;

    @URLAction
    public String action() {

    // get the language by looking up the default language
    // for the user or something like that
    String lang = .....;

    // set value to the correct property
    accueilView.setLanguage(lang);

    // send redirect to the target page.
    // the language to use for the link will be extracted
    // from the 'accueilView' bean.
    return "pretty:rootAction";

    }

    }

    Unfortunately you will need a “/something.xhtml” file, although it will not be rendered as the URL action will execute a redirect. But this file can be empty. It is required to be able to enter the JSF lifecycle for this request.

    Here are a few links that may be interesting for you:

    http://ocpsoft.com/docs/prettyfaces/snapshot/en-US/html_single/#inbound_rewriting

    http://ocpsoft.com/docs/prettyfaces/snapshot/en-US/html_single/#navigation.actions

    #20413

    balteo
    Participant

    To Lincoln,

    I can have only one URLMapping annotation per class. Can’t I?

    J.

    #20414

    balteo
    Participant

    To Christian,

    Thanks for your reply. This is an alternative albeit a bit “heavyweight”.

    Otherwise, do you think I could use a regex that would deal with both patterns? Is that realistic?

    J.

    #20415

    You could try to build such an regex, but I personally would prefer a rewrite rule that redirects to a default language. In this case there would be always a correct language set for the view you are rendering and you won’t need to add special “language is null” handling. Just my two cents! :-)

    Regarding two mappings on one class: Unfortunately this is currently not possible due to limitations of Java annotations. But I already thought about adding a @URLMappings annotation for the next version that could be used to encapsulate multiple @URLMapping annotations. Just like JPA’s @JoinColumns annotation:

    http://download.oracle.com/javaee/6/api/javax/persistence/JoinColumns.html

    In fact the use of this annotation would look like this:

    @URLMappings({
    @URLMapping(id="mapping1", pattern="/pattern1", viewId="/view1.jsf"),
    @URLMapping(id="mapping2", pattern="/pattern2", viewId="/view2.jsf")
    })
    public class MyBean {
    ...
    }

    But in this case @URLQueryParam and @URLAction annotations in the class cannot be assigned easily to the “mapping of the class” as there are multiple ones. I’m unsure how to handle this situation. Perhaps the user should be forced to use the mappingId attribute of the annotations to refer to a specific mapping in this case.

    #20416

    balteo
    Participant

    Hello Christian,

    That’s a good idea.

    Just another question for you: I tried to use the parentId attribute and I noticed it has a different behavior to restfaces’s httpparentaction.

    Here is what I want to achieve:

    http://ocpsoft.com/support/topic/equivalent-to-restfaces-httpparentaction-in-pretty-faces

    Do you see my problem? Can you help?

    Regards,

    Julien.

    #20417

    Hey balteo,

    I just committed the new @URLMappings annotation to the PrettyFaces trunk. Any chance that you could try the snapshots and check if this new annotation fits you needs?

    Thank you

    Christian

Viewing 8 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic.

Comments are closed.