myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <>
Subject [jira] [Commented] (MYFACES-4074) MyFaces + Primefaces: Dynamic ui:include + UIData (with rowStatePreserved) rendering problem
Date Tue, 01 Nov 2016 04:41:58 GMT


Leonardo Uribe commented on MYFACES-4074:

The javadoc of javax.faces.view.facelets.ComponentHandler defines the behavior of ComponentTagHandlerDelegate.
There is a part that mentions call markInitialState().

There is a web config param in MyFaces called org.apache.myfaces.MARK_INITIAL_STATE_WHEN_APPLY_BUILD_VIEW
that allows you to call markInitialState() only after the view is built, but I don't know
if that could help in your case.

MyFaces PSS algorithm aim to apply PSS inclusive in sections where ui:include src=EL expr
is used. Mojarra does not have those optimisations. I ignore what's inside primefaces, but
I'm aware there is a copy of Mojarra UIData deep inside its sources, so the fix should be
done there. 

> MyFaces + Primefaces: Dynamic ui:include + UIData (with rowStatePreserved) rendering
> --------------------------------------------------------------------------------------------
>                 Key: MYFACES-4074
>                 URL:
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.2.11
>            Reporter: Jiri Slovak
>            Assignee: Leonardo Uribe
> There is a situation where UIData with rowStatePreserved is not rendered. NullPointer
exception is thrown in this case.
> The example of such situation is:
> we have index.xhtml with ui:include with src attribute as expression
>         <h:form>
>             <h:panelGrid columns="1" bodyrows="3">
>                 <p:commandLink action="#{mainFrameBean.setMenu('iframe1.xhtml')}"
process="@this" update=":mainframe">Frame 1</p:commandLink>
>                 <p:commandLink action="#{mainFrameBean.setMenu('iframe2.xhtml')}"
process="@this" update=":mainframe">Frame 2</p:commandLink>
>                 <p:commandLink action="#{mainFrameBean.setMenu('iframe3.xhtml')}"
process="@this" update=":mainframe">Frame 3</p:commandLink>
>             </h:panelGrid>
>         </h:form>
>         <p:outputPanel id="mainframe">
>             <ui:include src="/frames/#{mainFrameBean.menuValue}" />
>         </p:outputPanel>
> we have datagrid coded in iframe2.xhtml
> <p:dataGrid var="car" value="#{}" columns="3" layout="grid"
>         rows="12" paginator="true" id="cars" rowStatePreserved="true"
>         paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks}
{NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
>         rowsPerPageTemplate="6,12,16">
>         <f:facet name="header">
>             Cars for Sale
>         </f:facet>
>         <p:panel header="#{}" style="text-align:center">
>             <h:outputText value="#{car.year}" />
>         </p:panel>
>     </p:dataGrid>
> Then if you click "Frame 2" commandlink you get nullpointer returned in the partial response
> The problem is UIData incorrectly handles initial descendant state during the render
response phase.
> I`ve prepared testapp code in github as an exapmle:
> (link 4 does not work correctly with myfaces, but works well with Mojarra).
> It seems the problem is that MyFaces sets initial state during the render response phase
(in case of partial request), whilst Mojarra sets markInitialState during the build phase.
> Jiri

This message was sent by Atlassian JIRA

View raw message