You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Yves Deschamps <yv...@univ-lille1.fr> on 2010/07/01 17:37:49 UTC

Trinidad PortletBridge buttons don't work fine

Hi at all,

I have this view and this methods in controller , all is fine in servlet 
mode but in portlet mode:

- the locale is not immedialty rendered (next page is ok)
- the "reset" change also the locale (in "en" where i am in "fr") 
without sense for me.

-----------------------------------------------------------------------

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%>
<%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%>
<f:view locale="#{commonController.locale}">
    <f:loadBundle basename="MessageResources" var="msg" />
    <tr:document title="#{msg['DIRECTORY.TEXT']}">
        <f:facet name="metaContainer">
            <link rel="apple-touch-icon" href="images/touchicon.png">
            <meta name="viewport" content="initial-scale=1.0, 
maximum-scale=1.0, user-scalable=0" />
            <link href="./minimal/minimal.css" rel="stylesheet" 
type="text/css" />
        </f:facet>
        <tr:form id="home">
            <tr:panelHeader id="panelHeader" styleClass="toolbar" 
text="#{msg['DIRECTORY.TEXT']}">
                <tr:commandLink id="reset" styleClass="resetButton" 
text="#{msg['CANCEL.TEXT']}"
                    actionListener="#{commonController.reset}" />
                <tr:commandLink styleClass="loginButton" action="login"
                    rendered="#{not commonController.userAuthenticated 
and not commonController.portletMode}"
                    immediate="true" />
                <tr:commandLink styleClass="logoutButton"
                    actionListener="#{commonController.logout}"
                    rendered="#{commonController.userAuthenticated and 
not commonController.portletMode}"
                    immediate="true" />
                <tr:commandLink id="fr" styleClass="frButton"
                    actionListener="#{commonController.setLocaleFrench}" 
immediate="true" />
                <tr:commandLink id="en" styleClass="enButton"
                    
actionListener="#{commonController.setLocaleEnglish}" immediate="true" />
            </tr:panelHeader>
            <tr:outputText styleClass="user" value="#{msg['USER.TEXT']} 
#{commonController.user}"
                rendered="#{commonController.userAuthenticated and not 
commonController.portletMode}" />
            <tr:panelList styleClass="panelList">
                <tr:inputText id="name" value="#{commonController.name}" 
required="true" label="">
                    <f:validator validatorId="nameValidator" />
                </tr:inputText>
                <tr:commandLink text="#{msg['STAFF.TEXT']}" 
action="persons" />
                <tr:commandLink text="#{msg['STUDENTS.TEXT']}" 
action="students"
                    rendered="#{commonController.userAuthenticated}" />
                <tr:commandLink text="#{msg['ENTITIES.TEXT']}" 
action="entities" />
                <tr:goLink text="#{msg['FACULTY_WEB_PAGE.TEXT']}"
                    destination="#{commonController.facultyWebPageUrl}" />
            </tr:panelList>
        </tr:form>
    </tr:document>
</f:view>

---------------------------------
    /**
     * @param actionEvent
     * @return navigation String.
     */
    public String setLocaleFrench(ActionEvent actionEvent) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getViewRoot().setLocale(new Locale("fr"));
        locale = "fr";
        logger.info("Language: fr");
        return "home";
    }

    /**
     * @param actionEvent
     * @return navigation String.
     */
    public String setLocaleEnglish(ActionEvent actionEvent) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getViewRoot().setLocale(new Locale("en"));
        locale = "en";
        logger.info("Language: en");
        return "home";
    }

    /**
     * @return the locale
     */
    public String getLocale() {
        return locale;
    }

    /**
     * @param actionEvent
     * @return navigation String.
     */
    public String reset(ActionEvent actionEvent) {
        name = null;
        logger.info("Action: reset");
        return "home";
    }

-- 
Yves Deschamps
CRI Pôle Web, Environnement Numérique de Travail
Bâtiment M4
Tel : 03 20 43 41 89
Fax : 03 20 43 66 25


Re: Trinidad PortletBridge buttons don't work fine

Posted by Yves Deschamps <yv...@univ-lille1.fr>.
Thank you very much Michael.

Finaly i try your last distrib 
(http://people.apache.org/~mfreedman/portlet-bridge/ ) and all is OK.

The portal is uPortal 3.2.1

I am very happy !

Michael Freedman a écrit :
> I wonder if this problem is the same as PORTLETBRIDGE-100 
> <https://issues.apache.org/jira/browse/PORTLETBRIDGE-100> 
> (https://issues.apache.org/jira/browse/PORTLETBRIDGE-100):
>
>    The first page of the JSF sample CarDemo has you set the locale for
>    the demo. You choose a language/region and the rest of the views use
>    strings earmarked for the language of the locale. In the portlet
>    case this fails -- you always use the English/default locale. This
>    is because the demo relies on an ActionHandler to set the locale of
>    the ViewRoot of the current view -- which subsequently is migrated
>    (by Faces) during the createView of the view the action handler
>    navigates to. When you render the subsequent view it uses this
>    locale. In the portlet case because render happens in a separate
>    request -- we rely on the bridge to cache the viewroot from the end
>    of the action and preset set it as the current viewRoot prior to
>    running the lifecycle. Well Faces has code in its restoreView phase
>    that if the ViewRoot was preset then it resets its locale to the
>    preferred one from the current request. I.e. we lose the locale we
>    wanted (that was set when the view was created at the end of the
>    action). To fix this, cache the locale in the beforePhase (of
>    restoreView) if using the preset ViewRoot and restore it in the
>    afterPhase.
>
> What version of the bridge are you using?  If P1.0B and its beta (or 
> before) then the above bug exists (or P2.0B alpha and before).  
> Anyway, I would suggest retrying with a new(er) bridge.  Either build 
> from the trunk, wait a few days as we are in the processing of pushing 
> the 1.0.0 release, or grab what we are pushing from our staged 
> artifacts at:
>
> http://people.apache.org/~mfreedman/portlet-bridge/
>
> Let me know if this fixes it.  If it doesn't please log a JIRA which 
> includes additional information describing the appserver and portal 
> server/container you are using, specific version information for all, 
> and (if possible) a small sample JSF app I can "portletize" so I can 
> deploy locally and debug.
>    -Mike-
>
> On 7/1/2010 8:37 AM, Yves Deschamps wrote:
>> Hi at all,
>>
>> I have this view and this methods in controller , all is fine in 
>> servlet mode but in portlet mode:
>>
>> - the locale is not immedialty rendered (next page is ok)
>> - the "reset" change also the locale (in "en" where i am in "fr") 
>> without sense for me.
>>
>> -----------------------------------------------------------------------
>>
>> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
>> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
>> <%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%>
>> <%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%>
>> <f:view locale="#{commonController.locale}">
>>    <f:loadBundle basename="MessageResources" var="msg" />
>>    <tr:document title="#{msg['DIRECTORY.TEXT']}">
>>        <f:facet name="metaContainer">
>>            <link rel="apple-touch-icon" href="images/touchicon.png">
>>            <meta name="viewport" content="initial-scale=1.0, 
>> maximum-scale=1.0, user-scalable=0" />
>>            <link href="./minimal/minimal.css" rel="stylesheet" 
>> type="text/css" />
>>        </f:facet>
>>        <tr:form id="home">
>>            <tr:panelHeader id="panelHeader" styleClass="toolbar" 
>> text="#{msg['DIRECTORY.TEXT']}">
>>                <tr:commandLink id="reset" styleClass="resetButton" 
>> text="#{msg['CANCEL.TEXT']}"
>>                    actionListener="#{commonController.reset}" />
>>                <tr:commandLink styleClass="loginButton" action="login"
>>                    rendered="#{not commonController.userAuthenticated 
>> and not commonController.portletMode}"
>>                    immediate="true" />
>>                <tr:commandLink styleClass="logoutButton"
>>                    actionListener="#{commonController.logout}"
>>                    rendered="#{commonController.userAuthenticated and 
>> not commonController.portletMode}"
>>                    immediate="true" />
>>                <tr:commandLink id="fr" styleClass="frButton"
>>                    
>> actionListener="#{commonController.setLocaleFrench}" immediate="true" />
>>                <tr:commandLink id="en" styleClass="enButton"
>>                    
>> actionListener="#{commonController.setLocaleEnglish}" 
>> immediate="true" />
>>            </tr:panelHeader>
>>            <tr:outputText styleClass="user" 
>> value="#{msg['USER.TEXT']} #{commonController.user}"
>>                rendered="#{commonController.userAuthenticated and not 
>> commonController.portletMode}" />
>>            <tr:panelList styleClass="panelList">
>>                <tr:inputText id="name" 
>> value="#{commonController.name}" required="true" label="">
>>                    <f:validator validatorId="nameValidator" />
>>                </tr:inputText>
>>                <tr:commandLink text="#{msg['STAFF.TEXT']}" 
>> action="persons" />
>>                <tr:commandLink text="#{msg['STUDENTS.TEXT']}" 
>> action="students"
>>                    rendered="#{commonController.userAuthenticated}" />
>>                <tr:commandLink text="#{msg['ENTITIES.TEXT']}" 
>> action="entities" />
>>                <tr:goLink text="#{msg['FACULTY_WEB_PAGE.TEXT']}"
>>                    
>> destination="#{commonController.facultyWebPageUrl}" />
>>            </tr:panelList>
>>        </tr:form>
>>    </tr:document>
>> </f:view>
>>
>> ---------------------------------
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String setLocaleFrench(ActionEvent actionEvent) {
>>        FacesContext context = FacesContext.getCurrentInstance();
>>        context.getViewRoot().setLocale(new Locale("fr"));
>>        locale = "fr";
>>        logger.info("Language: fr");
>>        return "home";
>>    }
>>
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String setLocaleEnglish(ActionEvent actionEvent) {
>>        FacesContext context = FacesContext.getCurrentInstance();
>>        context.getViewRoot().setLocale(new Locale("en"));
>>        locale = "en";
>>        logger.info("Language: en");
>>        return "home";
>>    }
>>
>>    /**
>>     * @return the locale
>>     */
>>    public String getLocale() {
>>        return locale;
>>    }
>>
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String reset(ActionEvent actionEvent) {
>>        name = null;
>>        logger.info("Action: reset");
>>        return "home";
>>    }
>>
>

-- 
Yves Deschamps
CRI Pôle Web, Environnement Numérique de Travail
Bâtiment M4
Tel : 03 20 43 41 89
Fax : 03 20 43 66 25


Re: Trinidad PortletBridge buttons don't work fine

Posted by Yves Deschamps <yv...@univ-lille1.fr>.
Sorry, i change the code with no effect...

    public void beforePhase(PhaseEvent phase) {
        FacesContext context = FacesContext.getCurrentInstance();
        cacheLocale = context.getViewRoot().getLocale();
    }
    public void afterPhase(PhaseEvent phase) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getViewRoot().setLocale(cacheLocale);
    }


Yves Deschamps a écrit :
> Thank you Michael,
>
> I try this:
>
> <f:view locale="#{commonController.locale}" 
> beforePhase="#{commonController.beforePhase}"
>    afterPhase="#{commonController.afterPhase}">
>
> and:
>
>    public void beforePhase(PhaseEvent phase) {
>        FacesContext context = FacesContext.getCurrentInstance();
>        cacheLocale = context.getViewRoot().getLocale().getCountry();
>    }
>      public void afterPhase(PhaseEvent phase) {
>        FacesContext context = FacesContext.getCurrentInstance();
>        context.getViewRoot().setLocale(new Locale(cacheLocale));
>    }
>   With no effect... Have I made an error?
>
> Michael Freedman a écrit :
>> I wonder if this problem is the same as PORTLETBRIDGE-100 
>> <https://issues.apache.org/jira/browse/PORTLETBRIDGE-100> 
>> (https://issues.apache.org/jira/browse/PORTLETBRIDGE-100):
>>
>>    The first page of the JSF sample CarDemo has you set the locale for
>>    the demo. You choose a language/region and the rest of the views use
>>    strings earmarked for the language of the locale. In the portlet
>>    case this fails -- you always use the English/default locale. This
>>    is because the demo relies on an ActionHandler to set the locale of
>>    the ViewRoot of the current view -- which subsequently is migrated
>>    (by Faces) during the createView of the view the action handler
>>    navigates to. When you render the subsequent view it uses this
>>    locale. In the portlet case because render happens in a separate
>>    request -- we rely on the bridge to cache the viewroot from the end
>>    of the action and preset set it as the current viewRoot prior to
>>    running the lifecycle. Well Faces has code in its restoreView phase
>>    that if the ViewRoot was preset then it resets its locale to the
>>    preferred one from the current request. I.e. we lose the locale we
>>    wanted (that was set when the view was created at the end of the
>>    action). To fix this, cache the locale in the beforePhase (of
>>    restoreView) if using the preset ViewRoot and restore it in the
>>    afterPhase.
>>
>> What version of the bridge are you using?  If P1.0B and its beta (or 
>> before) then the above bug exists (or P2.0B alpha and before).  
>> Anyway, I would suggest retrying with a new(er) bridge.  Either build 
>> from the trunk, wait a few days as we are in the processing of 
>> pushing the 1.0.0 release, or grab what we are pushing from our 
>> staged artifacts at:
>>
>> http://people.apache.org/~mfreedman/portlet-bridge/
>>
>> Let me know if this fixes it.  If it doesn't please log a JIRA which 
>> includes additional information describing the appserver and portal 
>> server/container you are using, specific version information for all, 
>> and (if possible) a small sample JSF app I can "portletize" so I can 
>> deploy locally and debug.
>>    -Mike-
>>
>> On 7/1/2010 8:37 AM, Yves Deschamps wrote:
>>> Hi at all,
>>>
>>> I have this view and this methods in controller , all is fine in 
>>> servlet mode but in portlet mode:
>>>
>>> - the locale is not immedialty rendered (next page is ok)
>>> - the "reset" change also the locale (in "en" where i am in "fr") 
>>> without sense for me.
>>>
>>> -----------------------------------------------------------------------
>>>
>>> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
>>> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
>>> <%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%>
>>> <%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%>
>>> <f:view locale="#{commonController.locale}">
>>>    <f:loadBundle basename="MessageResources" var="msg" />
>>>    <tr:document title="#{msg['DIRECTORY.TEXT']}">
>>>        <f:facet name="metaContainer">
>>>            <link rel="apple-touch-icon" href="images/touchicon.png">
>>>            <meta name="viewport" content="initial-scale=1.0, 
>>> maximum-scale=1.0, user-scalable=0" />
>>>            <link href="./minimal/minimal.css" rel="stylesheet" 
>>> type="text/css" />
>>>        </f:facet>
>>>        <tr:form id="home">
>>>            <tr:panelHeader id="panelHeader" styleClass="toolbar" 
>>> text="#{msg['DIRECTORY.TEXT']}">
>>>                <tr:commandLink id="reset" styleClass="resetButton" 
>>> text="#{msg['CANCEL.TEXT']}"
>>>                    actionListener="#{commonController.reset}" />
>>>                <tr:commandLink styleClass="loginButton" action="login"
>>>                    rendered="#{not 
>>> commonController.userAuthenticated and not 
>>> commonController.portletMode}"
>>>                    immediate="true" />
>>>                <tr:commandLink styleClass="logoutButton"
>>>                    actionListener="#{commonController.logout}"
>>>                    rendered="#{commonController.userAuthenticated 
>>> and not commonController.portletMode}"
>>>                    immediate="true" />
>>>                <tr:commandLink id="fr" styleClass="frButton"
>>>                    
>>> actionListener="#{commonController.setLocaleFrench}" 
>>> immediate="true" />
>>>                <tr:commandLink id="en" styleClass="enButton"
>>>                    
>>> actionListener="#{commonController.setLocaleEnglish}" 
>>> immediate="true" />
>>>            </tr:panelHeader>
>>>            <tr:outputText styleClass="user" 
>>> value="#{msg['USER.TEXT']} #{commonController.user}"
>>>                rendered="#{commonController.userAuthenticated and 
>>> not commonController.portletMode}" />
>>>            <tr:panelList styleClass="panelList">
>>>                <tr:inputText id="name" 
>>> value="#{commonController.name}" required="true" label="">
>>>                    <f:validator validatorId="nameValidator" />
>>>                </tr:inputText>
>>>                <tr:commandLink text="#{msg['STAFF.TEXT']}" 
>>> action="persons" />
>>>                <tr:commandLink text="#{msg['STUDENTS.TEXT']}" 
>>> action="students"
>>>                    rendered="#{commonController.userAuthenticated}" />
>>>                <tr:commandLink text="#{msg['ENTITIES.TEXT']}" 
>>> action="entities" />
>>>                <tr:goLink text="#{msg['FACULTY_WEB_PAGE.TEXT']}"
>>>                    
>>> destination="#{commonController.facultyWebPageUrl}" />
>>>            </tr:panelList>
>>>        </tr:form>
>>>    </tr:document>
>>> </f:view>
>>>
>>> ---------------------------------
>>>    /**
>>>     * @param actionEvent
>>>     * @return navigation String.
>>>     */
>>>    public String setLocaleFrench(ActionEvent actionEvent) {
>>>        FacesContext context = FacesContext.getCurrentInstance();
>>>        context.getViewRoot().setLocale(new Locale("fr"));
>>>        locale = "fr";
>>>        logger.info("Language: fr");
>>>        return "home";
>>>    }
>>>
>>>    /**
>>>     * @param actionEvent
>>>     * @return navigation String.
>>>     */
>>>    public String setLocaleEnglish(ActionEvent actionEvent) {
>>>        FacesContext context = FacesContext.getCurrentInstance();
>>>        context.getViewRoot().setLocale(new Locale("en"));
>>>        locale = "en";
>>>        logger.info("Language: en");
>>>        return "home";
>>>    }
>>>
>>>    /**
>>>     * @return the locale
>>>     */
>>>    public String getLocale() {
>>>        return locale;
>>>    }
>>>
>>>    /**
>>>     * @param actionEvent
>>>     * @return navigation String.
>>>     */
>>>    public String reset(ActionEvent actionEvent) {
>>>        name = null;
>>>        logger.info("Action: reset");
>>>        return "home";
>>>    }
>>>
>>
>

-- 
Yves Deschamps
CRI Pôle Web, Environnement Numérique de Travail
Bâtiment M4
Tel : 03 20 43 41 89
Fax : 03 20 43 66 25


Re: Trinidad PortletBridge buttons don't work fine

Posted by Yves Deschamps <yv...@univ-lille1.fr>.
Thank you Michael,

I try this:

<f:view locale="#{commonController.locale}" 
beforePhase="#{commonController.beforePhase}"
    afterPhase="#{commonController.afterPhase}">

and:

    public void beforePhase(PhaseEvent phase) {
        FacesContext context = FacesContext.getCurrentInstance();
        cacheLocale = context.getViewRoot().getLocale().getCountry();
    }
   
    public void afterPhase(PhaseEvent phase) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.getViewRoot().setLocale(new Locale(cacheLocale));
    }
   
With no effect... Have I made an error?

Michael Freedman a écrit :
> I wonder if this problem is the same as PORTLETBRIDGE-100 
> <https://issues.apache.org/jira/browse/PORTLETBRIDGE-100> 
> (https://issues.apache.org/jira/browse/PORTLETBRIDGE-100):
>
>    The first page of the JSF sample CarDemo has you set the locale for
>    the demo. You choose a language/region and the rest of the views use
>    strings earmarked for the language of the locale. In the portlet
>    case this fails -- you always use the English/default locale. This
>    is because the demo relies on an ActionHandler to set the locale of
>    the ViewRoot of the current view -- which subsequently is migrated
>    (by Faces) during the createView of the view the action handler
>    navigates to. When you render the subsequent view it uses this
>    locale. In the portlet case because render happens in a separate
>    request -- we rely on the bridge to cache the viewroot from the end
>    of the action and preset set it as the current viewRoot prior to
>    running the lifecycle. Well Faces has code in its restoreView phase
>    that if the ViewRoot was preset then it resets its locale to the
>    preferred one from the current request. I.e. we lose the locale we
>    wanted (that was set when the view was created at the end of the
>    action). To fix this, cache the locale in the beforePhase (of
>    restoreView) if using the preset ViewRoot and restore it in the
>    afterPhase.
>
> What version of the bridge are you using?  If P1.0B and its beta (or 
> before) then the above bug exists (or P2.0B alpha and before).  
> Anyway, I would suggest retrying with a new(er) bridge.  Either build 
> from the trunk, wait a few days as we are in the processing of pushing 
> the 1.0.0 release, or grab what we are pushing from our staged 
> artifacts at:
>
> http://people.apache.org/~mfreedman/portlet-bridge/
>
> Let me know if this fixes it.  If it doesn't please log a JIRA which 
> includes additional information describing the appserver and portal 
> server/container you are using, specific version information for all, 
> and (if possible) a small sample JSF app I can "portletize" so I can 
> deploy locally and debug.
>    -Mike-
>
> On 7/1/2010 8:37 AM, Yves Deschamps wrote:
>> Hi at all,
>>
>> I have this view and this methods in controller , all is fine in 
>> servlet mode but in portlet mode:
>>
>> - the locale is not immedialty rendered (next page is ok)
>> - the "reset" change also the locale (in "en" where i am in "fr") 
>> without sense for me.
>>
>> -----------------------------------------------------------------------
>>
>> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
>> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
>> <%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%>
>> <%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%>
>> <f:view locale="#{commonController.locale}">
>>    <f:loadBundle basename="MessageResources" var="msg" />
>>    <tr:document title="#{msg['DIRECTORY.TEXT']}">
>>        <f:facet name="metaContainer">
>>            <link rel="apple-touch-icon" href="images/touchicon.png">
>>            <meta name="viewport" content="initial-scale=1.0, 
>> maximum-scale=1.0, user-scalable=0" />
>>            <link href="./minimal/minimal.css" rel="stylesheet" 
>> type="text/css" />
>>        </f:facet>
>>        <tr:form id="home">
>>            <tr:panelHeader id="panelHeader" styleClass="toolbar" 
>> text="#{msg['DIRECTORY.TEXT']}">
>>                <tr:commandLink id="reset" styleClass="resetButton" 
>> text="#{msg['CANCEL.TEXT']}"
>>                    actionListener="#{commonController.reset}" />
>>                <tr:commandLink styleClass="loginButton" action="login"
>>                    rendered="#{not commonController.userAuthenticated 
>> and not commonController.portletMode}"
>>                    immediate="true" />
>>                <tr:commandLink styleClass="logoutButton"
>>                    actionListener="#{commonController.logout}"
>>                    rendered="#{commonController.userAuthenticated and 
>> not commonController.portletMode}"
>>                    immediate="true" />
>>                <tr:commandLink id="fr" styleClass="frButton"
>>                    
>> actionListener="#{commonController.setLocaleFrench}" immediate="true" />
>>                <tr:commandLink id="en" styleClass="enButton"
>>                    
>> actionListener="#{commonController.setLocaleEnglish}" 
>> immediate="true" />
>>            </tr:panelHeader>
>>            <tr:outputText styleClass="user" 
>> value="#{msg['USER.TEXT']} #{commonController.user}"
>>                rendered="#{commonController.userAuthenticated and not 
>> commonController.portletMode}" />
>>            <tr:panelList styleClass="panelList">
>>                <tr:inputText id="name" 
>> value="#{commonController.name}" required="true" label="">
>>                    <f:validator validatorId="nameValidator" />
>>                </tr:inputText>
>>                <tr:commandLink text="#{msg['STAFF.TEXT']}" 
>> action="persons" />
>>                <tr:commandLink text="#{msg['STUDENTS.TEXT']}" 
>> action="students"
>>                    rendered="#{commonController.userAuthenticated}" />
>>                <tr:commandLink text="#{msg['ENTITIES.TEXT']}" 
>> action="entities" />
>>                <tr:goLink text="#{msg['FACULTY_WEB_PAGE.TEXT']}"
>>                    
>> destination="#{commonController.facultyWebPageUrl}" />
>>            </tr:panelList>
>>        </tr:form>
>>    </tr:document>
>> </f:view>
>>
>> ---------------------------------
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String setLocaleFrench(ActionEvent actionEvent) {
>>        FacesContext context = FacesContext.getCurrentInstance();
>>        context.getViewRoot().setLocale(new Locale("fr"));
>>        locale = "fr";
>>        logger.info("Language: fr");
>>        return "home";
>>    }
>>
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String setLocaleEnglish(ActionEvent actionEvent) {
>>        FacesContext context = FacesContext.getCurrentInstance();
>>        context.getViewRoot().setLocale(new Locale("en"));
>>        locale = "en";
>>        logger.info("Language: en");
>>        return "home";
>>    }
>>
>>    /**
>>     * @return the locale
>>     */
>>    public String getLocale() {
>>        return locale;
>>    }
>>
>>    /**
>>     * @param actionEvent
>>     * @return navigation String.
>>     */
>>    public String reset(ActionEvent actionEvent) {
>>        name = null;
>>        logger.info("Action: reset");
>>        return "home";
>>    }
>>
>

-- 
Yves Deschamps
CRI Pôle Web, Environnement Numérique de Travail
Bâtiment M4
Tel : 03 20 43 41 89
Fax : 03 20 43 66 25


Re: Trinidad PortletBridge buttons don't work fine

Posted by Michael Freedman <mi...@oracle.com>.
I wonder if this problem is the same as PORTLETBRIDGE-100 
<https://issues.apache.org/jira/browse/PORTLETBRIDGE-100> 
(https://issues.apache.org/jira/browse/PORTLETBRIDGE-100):

    The first page of the JSF sample CarDemo has you set the locale for
    the demo. You choose a language/region and the rest of the views use
    strings earmarked for the language of the locale. In the portlet
    case this fails -- you always use the English/default locale. This
    is because the demo relies on an ActionHandler to set the locale of
    the ViewRoot of the current view -- which subsequently is migrated
    (by Faces) during the createView of the view the action handler
    navigates to. When you render the subsequent view it uses this
    locale. In the portlet case because render happens in a separate
    request -- we rely on the bridge to cache the viewroot from the end
    of the action and preset set it as the current viewRoot prior to
    running the lifecycle. Well Faces has code in its restoreView phase
    that if the ViewRoot was preset then it resets its locale to the
    preferred one from the current request. I.e. we lose the locale we
    wanted (that was set when the view was created at the end of the
    action). To fix this, cache the locale in the beforePhase (of
    restoreView) if using the preset ViewRoot and restore it in the
    afterPhase.

What version of the bridge are you using?  If P1.0B and its beta (or 
before) then the above bug exists (or P2.0B alpha and before).  Anyway, 
I would suggest retrying with a new(er) bridge.  Either build from the 
trunk, wait a few days as we are in the processing of pushing the 1.0.0 
release, or grab what we are pushing from our staged artifacts at:

http://people.apache.org/~mfreedman/portlet-bridge/

Let me know if this fixes it.  If it doesn't please log a JIRA which 
includes additional information describing the appserver and portal 
server/container you are using, specific version information for all, 
and (if possible) a small sample JSF app I can "portletize" so I can 
deploy locally and debug.
    -Mike-

On 7/1/2010 8:37 AM, Yves Deschamps wrote:
> Hi at all,
>
> I have this view and this methods in controller , all is fine in 
> servlet mode but in portlet mode:
>
> - the locale is not immedialty rendered (next page is ok)
> - the "reset" change also the locale (in "en" where i am in "fr") 
> without sense for me.
>
> -----------------------------------------------------------------------
>
> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
> <%@ taglib uri="http://myfaces.apache.org/trinidad" prefix="tr"%>
> <%@ taglib uri="http://myfaces.apache.org/trinidad/html" prefix="trh"%>
> <f:view locale="#{commonController.locale}">
>    <f:loadBundle basename="MessageResources" var="msg" />
>    <tr:document title="#{msg['DIRECTORY.TEXT']}">
>        <f:facet name="metaContainer">
>            <link rel="apple-touch-icon" href="images/touchicon.png">
>            <meta name="viewport" content="initial-scale=1.0, 
> maximum-scale=1.0, user-scalable=0" />
>            <link href="./minimal/minimal.css" rel="stylesheet" 
> type="text/css" />
>        </f:facet>
>        <tr:form id="home">
>            <tr:panelHeader id="panelHeader" styleClass="toolbar" 
> text="#{msg['DIRECTORY.TEXT']}">
>                <tr:commandLink id="reset" styleClass="resetButton" 
> text="#{msg['CANCEL.TEXT']}"
>                    actionListener="#{commonController.reset}" />
>                <tr:commandLink styleClass="loginButton" action="login"
>                    rendered="#{not commonController.userAuthenticated 
> and not commonController.portletMode}"
>                    immediate="true" />
>                <tr:commandLink styleClass="logoutButton"
>                    actionListener="#{commonController.logout}"
>                    rendered="#{commonController.userAuthenticated and 
> not commonController.portletMode}"
>                    immediate="true" />
>                <tr:commandLink id="fr" styleClass="frButton"
>                    
> actionListener="#{commonController.setLocaleFrench}" immediate="true" />
>                <tr:commandLink id="en" styleClass="enButton"
>                    
> actionListener="#{commonController.setLocaleEnglish}" immediate="true" />
>            </tr:panelHeader>
>            <tr:outputText styleClass="user" value="#{msg['USER.TEXT']} 
> #{commonController.user}"
>                rendered="#{commonController.userAuthenticated and not 
> commonController.portletMode}" />
>            <tr:panelList styleClass="panelList">
>                <tr:inputText id="name" 
> value="#{commonController.name}" required="true" label="">
>                    <f:validator validatorId="nameValidator" />
>                </tr:inputText>
>                <tr:commandLink text="#{msg['STAFF.TEXT']}" 
> action="persons" />
>                <tr:commandLink text="#{msg['STUDENTS.TEXT']}" 
> action="students"
>                    rendered="#{commonController.userAuthenticated}" />
>                <tr:commandLink text="#{msg['ENTITIES.TEXT']}" 
> action="entities" />
>                <tr:goLink text="#{msg['FACULTY_WEB_PAGE.TEXT']}"
>                    destination="#{commonController.facultyWebPageUrl}" />
>            </tr:panelList>
>        </tr:form>
>    </tr:document>
> </f:view>
>
> ---------------------------------
>    /**
>     * @param actionEvent
>     * @return navigation String.
>     */
>    public String setLocaleFrench(ActionEvent actionEvent) {
>        FacesContext context = FacesContext.getCurrentInstance();
>        context.getViewRoot().setLocale(new Locale("fr"));
>        locale = "fr";
>        logger.info("Language: fr");
>        return "home";
>    }
>
>    /**
>     * @param actionEvent
>     * @return navigation String.
>     */
>    public String setLocaleEnglish(ActionEvent actionEvent) {
>        FacesContext context = FacesContext.getCurrentInstance();
>        context.getViewRoot().setLocale(new Locale("en"));
>        locale = "en";
>        logger.info("Language: en");
>        return "home";
>    }
>
>    /**
>     * @return the locale
>     */
>    public String getLocale() {
>        return locale;
>    }
>
>    /**
>     * @param actionEvent
>     * @return navigation String.
>     */
>    public String reset(ActionEvent actionEvent) {
>        name = null;
>        logger.info("Action: reset");
>        return "home";
>    }
>