[ http://issues.apache.org/jira/browse/MYFACES-1359?page=all ]

John Singleton updated MYFACES-1359:
------------------------------------

    Status: Patch Available  (was: Open)

> PortletExternalContextImpl.encodeNamespace called during portlet ActionRequest
> ------------------------------------------------------------------------------
>
>          Key: MYFACES-1359
>          URL: http://issues.apache.org/jira/browse/MYFACES-1359
>      Project: MyFaces Core
>         Type: Bug

>   Components: Portlet_Support
>     Versions: 1.1.5-SNAPSHOT
>  Environment: Facelets + Liferay 4.0.0
>     Reporter: John Singleton

>
> Theis portlet fragment renders one of 2 components depending on the selection 
> in the selectOneMenu: 
> <div xmlns:f="http://java.sun.com/jsf/core";
>     xmlns:h="http://java.sun.com/jsf/html";>        
>     <h:form>
>         <h:outputLabel for="list">foo</h:outputLabel>
>         <h:selectOneMenu value="${booleanTest.choice}" 
> id="list"><f:selectItems value="#{booleanTest.selectList}"/></h:selectOneMenu>
>         <h:commandButton action="#{booleanTest.doIt}"/>
>     </h:form>
>     <h:outputText rendered="#{empty booleanTest.list}" value="Empty"/>
>     <h:dataTable rendered="#{! empty booleanTest.list}" 
> value="#{booleanTest.list}" var="l" border="1">
>         <h:column>
>             <f:facet name="header"><h:outputText value="Column"/></f:facet>
>             <h:outputText value="#{l}"/>
>         </h:column>
>     </h:dataTable>
> </div>
> It's using this simple bean:
> public class BooleanTest {
>     private List<String> list =  new ArrayList<String>();
>     private List<String> emptyList = new ArrayList<String>();
>     private String choice = "Foo";
>     private List<SelectItem> selectList = null;
>     
>     public List<String> getList() {
>         if (choice.equals("Foo")) {
>             return emptyList;
>         } else {
>             if (list.isEmpty()) {
>                 list = new ArrayList<String>();
>                 list.add("Hello");
>                 list.add("World");
>                 list.add("!!!!!");
>             }
>             return list;
>         }
>     }
>     
>     public String doIt() {
>         return "success";
>     }
>     public List<SelectItem> getSelectList() {
>         if (selectList == null) {
>             selectList = new ArrayList<SelectItem>();
>             selectList.add(new SelectItem("Foo", "Foo"));
>             selectList.add(new SelectItem("bar", "bar"));
>         }
>         return selectList;
>     }
>     public String getChoice() {
>         return choice;
>     }
>     public void setChoice(String choice) {
>         this.choice = choice;
>     }
> }
> When I first add this portlet to a page, I get the drop down list, the submit 
> button and the "empty" message. If I select the 'bar' entry in the list and 
> click submit I get the error, " Can not call encodeNamespace() during a 
> portlet ActionRequest"
> It seems to be because MyFacesGenericPortlet.processAction calls 
> lifecycle.execute, which in turn starts createing components for the table 
> (which wasn't in the first call to the page). This calls encodeNamespace for 
> the new componenet IDs and thats when it falls over.
> I fixed this by changing PortletExternalContextImpl.encodeNamespace to return 
> null instead of throwing an IllegalStateException. My application seems to be 
> working well with this solution, but I don't know if it might have any knock 
> on effects?

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to