myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mike Kienenberger <mkien...@gmail.com>
Subject Re: commandlink not working in panelgrid
Date Thu, 10 May 2012 17:39:16 GMT
This is one of the basic concepts that you learn as you work with JSF
-- for a UICommand component to perform its action, it must be
rendered on the initial view, and it must also be rendered on the view
created to process the submit.

So whatever condition you use for rendered must involve objects that
exist longer than request scope.

Also, static class variables are not available for use in the EL
expression.   I believe non-public class instance variables are also
not available, but I think public ones are.   To be on the safe side,
you should provide a bean getter for any variable you want to access
from the EL expression.

So for resources.LOGIN_TYPE_MY_ACCOUNT to work, you would need to
provide a getLOGIN_TYPE_MY_ACCOUNT() { return LOGIN_TYPE_MY_ACCOUNT; }
method on your resources bean.


On Wed, May 9, 2012 at 4:46 PM, Lim Hock-Chai
<Lim.Hock-Chai@usamobility.com> wrote:
> I should probably clarify by saying, it shows the link but just will not fire the action
when click on it.  Another word, the rendered test is successful on panelgrid (hence the
link is shown), but the test failed when clicked on the link.  Scratch my head on this for
two days.  Learn a new tricks-of-the-trade, priceless...
>
>
>
> -----Original Message-----
> From: Lim Hock-Chai [mailto:Lim.Hock-Chai@usamobility.com]
> Sent: Wednesday, May 09, 2012 3:36 PM
> To: MyFaces Discussion
> Subject: RE: commandlink not working in panelgrid
>
> Finally got it to work inside panelgrid.  I don't understand it but it works.  Shasi,
I think you are right about the problem is caused by rendered attribute being evaluated as
false when clicked.  Below is what I did to get it to work.  Hopefully you or someone can
explain why.
>
> The code change that I made to get it to work is on this line only:
> <h:panelGrid  rendered="#{not empty sessionScope.MyAccountLoginType and sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT
}">
>
> It works if I change it to this:
> <h:panelGrid  rendered="#{ sessionScope.MyAccountLoginType=='MA'}">
> Note : value of MA is what I have in my message bundle "resources.LOGIN_TYPE_MY_ACCOUNT".
 Just to be sure, I did <h:outputText value="#{resources.LOGIN_TYPE_MY_ACCOUNT} "/>
and it output value of MA correctly.  Not sure why I can't use it to perform the rendered
test.
>
> I tried below and non of them work.  But I don't know why:
> <h:panelGrid  rendered="#{not empty sessionScope.MyAccountLoginType and sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT
}">
>
> <h:panelGrid  rendered="#{not empty sessionScope.MyAccountLoginType and sessionScope.MyAccountLoginType=='MA'
}">
>
> <h:panelGrid  rendered="${not empty sessionScope.MyAccountLoginType and sessionScope.MyAccountLoginType=='MA'
}">
>
>
> -----Original Message-----
> From: Lim Hock-Chai [mailto:Lim.Hock-Chai@usamobility.com]
> Sent: Wednesday, May 09, 2012 1:52 PM
> To: MyFaces Discussion
> Subject: RE: commandlink not working in panelgrid
>
> I added an onclick="alert(#{not empty sessionScope.MyAccountLoginType and sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT
})" on the commandlink element and the alert showing value of true when I click on the link.
>
>
>                <h:panelGrid
>                                rendered="#{not empty sessionScope.MyAccountLoginType
and
>                                                          
             sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT }">
>                        <h:outputText value=" "/>
>                        <h:outputText value="|"/>
>                        <h:commandLink
>                                immediate="true"
>                                onclick="alert(#{not empty sessionScope.MyAccountLoginType
and sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT })"
>                                style="CURSOR: pointer"
>                                action="#{commonTaskBean.fromMSAMBackToMyAccount}">
>                                <h:outputText value="My Account"/>
>                        </h:commandLink>
>                        <h:outputText value="|"/>
>                </h:panelGrid>
>
> -----Original Message-----
> From: Shasi Mitra [mailto:shasimitra@yahoo.com]
> Sent: Wednesday, May 09, 2012 1:36 PM
> To: MyFaces Discussion
> Subject: Re: commandlink not working in panelgrid
>
> After u click the link also the expression in the rendered attribute is evaluated. That
time it should be returning Faldo and hence ur action isn't being fired. If u remove all the
rendered attributes or keep ur bean in session scope, it should work. Try printing the expression
u gave in the rendered attribute and check.
>
> Sent from my iPhone
>
> On May 9, 2012, at 11:59 PM, Lim Hock-Chai <Lim.Hock-Chai@usamobility.com> wrote:
>
>> I tried both session and request scopes.  Both failed to work.  The thing is that
the commandlink is showing on the page, which would mean that the rendered condition in the
panelGroup or panelgrid is ok.  It just that when I click on the link that is inside the
panelgroup/panelgrid, it does not work.  I even tried not using any rendered condition on
the panelGroup/panelGrid, the link still not working.  Oddest thing.
>>
>>
>>
>> -----Original Message-----
>> From: Shasi Mitra [mailto:shasimitra@yahoo.com]
>> Sent: Wednesday, May 09, 2012 1:12 PM
>> To: MyFaces Discussion
>> Subject: Re: commandlink not working in panelgrid
>>
>> Are u sure ur bean is in session scope? Befor the action event is fired, it's verified
whether the grid is rendered or not. So if the bean is in request scope, it returns False
and therefore the link's action isn't fired.
>>
>> Sent from my iPhone
>>
>> On May 9, 2012, at 9:57 PM, Lim Hock-Chai <Lim.Hock-Chai@usamobility.com> wrote:
>>
>>> I'm currently using myfaces 1.1.9 for my web app.  I'm having some problems
with commandlink not working correctly for me.  It appears that when commandlink is inside
of the panelgrid, it is not calling the method specified in the action attr.  But it works
fine if I put it outside of the panelgrid.  Strange part is that I've had other jsp that
have commandlink inside datatable and they work fine also.  This is the first time I use
it inside a panelgrid.
>>>
>>> See code below.  The first commandlink is, which is not inside of panelgrid,
works fine.  The 2nd commandlink is inside of panelgrid and it is not working (not calling
back-end bean method)
>>>
>>> <jsp:root version="2.0"
>>>   xmlns:jsp="http://java.sun.com/JSP/Page"
>>>    xmlns:c="http://java.sun.com/jsp/jstl/core"
>>>    xmlns:f="http://java.sun.com/jsf/core"
>>>    xmlns:h="http://java.sun.com/jsf/html"
>>>    xmlns:t="http://myfaces.apache.org/tomahawk"
>>>    xmlns:a4j="http://richfaces.org/a4j">
>>>
>>> <f:subview>
>>>   <f:loadBundle var="resources" basename="com.arch.myaccount.jsf.Resources"/>
>>>   <h:form id="MSAMHeaderOtherForm">
>>>
>>>       <!-- commandlink below works fine -->
>>>       <h:outputText value="|"/>
>>>       <h:commandLink  immediate="true" style="CURSOR: pointer"  action="#{commonTaskBean.fromMSAMBackToMyAccount}"
>
>>>           <h:outputText value="My Account"/>
>>>       </h:commandLink>
>>>       <h:outputText value="|"/>
>>>
>>>       <!-- commandlink below does not work -->
>>>       <h:panelGroup
>>>               rendered="#{not empty sessionScope.MyAccountLoginType and
>>>                                   sessionScope.MyAccountLoginType==resources.LOGIN_TYPE_MY_ACCOUNT
}">
>>>           <h:outputText value=" "/>
>>>           <h:outputText value="|"/>
>>>           <h:commandLink  immediate="true" style="CURSOR: pointer"  action="#{commonTaskBean.fromMSAMBackToMyAccount}">
>>>               <h:outputText value="My Account"/>
>>>           </h:commandLink>
>>>           <h:outputText value="|"/>
>>>       </h:panelGroup>
>>>   </h:form>
>>> </f:subview>
>>> </jsp:root>

Mime
View raw message