You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Stephen Friedrich (JIRA)" <de...@myfaces.apache.org> on 2007/10/01 23:22:50 UTC

[jira] Created: (TRINIDAD-750) PPR does not R: Table rows are not refreshed

PPR does not R: Table rows are not refreshed
--------------------------------------------

                 Key: TRINIDAD-750
                 URL: https://issues.apache.org/jira/browse/TRINIDAD-750
             Project: MyFaces Trinidad
          Issue Type: Bug
            Reporter: Stephen Friedrich
            Priority: Critical


I try to implement a table with inline editing.
In a checkbox above the table I initially select a value (a department in my real app) which populates the table via autosubmit.

However I have not managed to get it working. PPR does not recognize that it must update the individual table rows.
It only adds/removes rows if the row count changed, but is always showing the very same value, even if they changed on the server.

I coded an example to show the problem:

Simple bean:
{code}package com.corejsf;

public class Datum {
    private String name;
    private int count;

    public Datum(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public int getCount() { return count; }
    public void setCount(int count) { this.count = count; }
}{code}

Bean that provides the table date (you may just replace the seam component definition with a JSF managed bean:
{code}package com.corejsf;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import java.util.Random;

@Name("tableData")
@Scope(ScopeType.SESSION)
public class TableData {
    private Random random = new Random();
    private Datum[] data;
    private String selectedValue = "2";

    public TableData() {
        refresh();
    }

    public Datum[] getData() { return data; }

    public void setSelectedValue(String selectedValue) {
        this.selectedValue = selectedValue;
        refresh();
    }

    public String getSelectedValue() { return selectedValue; }

    public void refresh() {
        int i = random.nextInt(4);
        int length = i == 3 ? 4 : 3;

        data = new Datum[length];
        for (int i1 = 0; i1 < data.length; i1++) {
            data[i1] = new Datum(Character.toString((char) ('A' + random.nextInt(26))), random.nextInt(100) + 1);
        }
    }
}
{code}

This is my page (using facelets). When you change the selection in the dropwdown the table data is randomly changed and sometimes the row count is changed from 3 to 4 or back. PPR is working somehow: The table will add/delete the additional row. But it will never show current values:

{code:html}<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:tr="http://myfaces.apache.org/trinidad"
      xmlns:trh="http://myfaces.apache.org/trinidad/html">

    <trh:head/>

    <trh:body>
        <tr:messages globalOnly="true"/>

        <tr:form>
            <tr:subform id="selectForm">
                <tr:selectOneChoice id="selectId" value="#{tableData.selectedValue}" autoSubmit="true">
                    <f:selectItem itemLabel="Eins" itemValue="1"/>
                    <f:selectItem itemLabel="Zwei" itemValue="2"/>
                </tr:selectOneChoice>
            </tr:subform>


            <tr:subform>
                <tr:table value="#{tableData.data}" var="datum" partialTriggers=":selectForm:selectId">
                    <tr:column headerText="Name">
                        <tr:inputText value="#{datum.name}"/>
                    </tr:column>

                    <tr:column headerText="Count">
                        <h:inputText value="#{datum.count}"/>
                    </tr:column>

                </tr:table>
            </tr:subform>
        </tr:form>
    </trh:body>
</html>{code}

This is the same page using only pure JSF without PPR, no autosubmit. It is working fine:
{code:html}<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:tr="http://myfaces.apache.org/trinidad"
      xmlns:trh="http://myfaces.apache.org/trinidad/html">

    <trh:head title="m/score/engine"/>

    <trh:body>
        <tr:messages globalOnly="true"/>

        <h:form>
            <h:selectOneMenu value="#{tableData.selectedValue}">
                <f:selectItem itemLabel="Eins" itemValue="1"/>
                <f:selectItem itemLabel="Zwei" itemValue="2"/>
            </h:selectOneMenu>
            <tr:commandButton text="Refresh Table"/>
        </h:form>


        <h:form>
            <h:dataTable value="#{tableData.data}" var="datum">
                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Name"/>
                    </f:facet>
                    <h:inputText value="#{datum.name}"/>
                </h:column>

                <h:column>
                    <f:facet name="header">
                        <h:outputText value="Count"/>
                    </f:facet>
                    <h:inputText value="#{datum.count}"/>
                </h:column>

            </h:dataTable>
        </h:form>
    </trh:body>
</html>
{code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (TRINIDAD-750) PPR does not R: Table rows are not refreshed

Posted by "Stephen Friedrich (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/TRINIDAD-750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12531642 ] 

Stephen Friedrich commented on TRINIDAD-750:
--------------------------------------------

No Jira macors enabled?!

> PPR does not R: Table rows are not refreshed
> --------------------------------------------
>
>                 Key: TRINIDAD-750
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-750
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>    Affects Versions: 1.0.3-core
>            Reporter: Stephen Friedrich
>            Priority: Critical
>
> I try to implement a table with inline editing.
> In a checkbox above the table I initially select a value (a department in my real app) which populates the table via autosubmit.
> However I have not managed to get it working. PPR does not recognize that it must update the individual table rows.
> It only adds/removes rows if the row count changed, but is always showing the very same value, even if they changed on the server.
> I coded an example to show the problem:
> Simple bean:
> {code}package com.corejsf;
> public class Datum {
>     private String name;
>     private int count;
>     public Datum(String name, int count) {
>         this.name = name;
>         this.count = count;
>     }
>     public String getName() { return name; }
>     public void setName(String name) { this.name = name; }
>     public int getCount() { return count; }
>     public void setCount(int count) { this.count = count; }
> }{code}
> Bean that provides the table date (you may just replace the seam component definition with a JSF managed bean:
> {code}package com.corejsf;
> import org.jboss.seam.ScopeType;
> import org.jboss.seam.annotations.Name;
> import org.jboss.seam.annotations.Scope;
> import java.util.Random;
> @Name("tableData")
> @Scope(ScopeType.SESSION)
> public class TableData {
>     private Random random = new Random();
>     private Datum[] data;
>     private String selectedValue = "2";
>     public TableData() {
>         refresh();
>     }
>     public Datum[] getData() { return data; }
>     public void setSelectedValue(String selectedValue) {
>         this.selectedValue = selectedValue;
>         refresh();
>     }
>     public String getSelectedValue() { return selectedValue; }
>     public void refresh() {
>         int i = random.nextInt(4);
>         int length = i == 3 ? 4 : 3;
>         data = new Datum[length];
>         for (int i1 = 0; i1 < data.length; i1++) {
>             data[i1] = new Datum(Character.toString((char) ('A' + random.nextInt(26))), random.nextInt(100) + 1);
>         }
>     }
> }
> {code}
> This is my page (using facelets). When you change the selection in the dropwdown the table data is randomly changed and sometimes the row count is changed from 3 to 4 or back. PPR is working somehow: The table will add/delete the additional row. But it will never show current values:
> {code:html}<?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
>       xmlns:ui="http://java.sun.com/jsf/facelets"
>       xmlns:f="http://java.sun.com/jsf/core"
>       xmlns:h="http://java.sun.com/jsf/html"
>       xmlns:tr="http://myfaces.apache.org/trinidad"
>       xmlns:trh="http://myfaces.apache.org/trinidad/html">
>     <trh:head/>
>     <trh:body>
>         <tr:messages globalOnly="true"/>
>         <tr:form>
>             <tr:subform id="selectForm">
>                 <tr:selectOneChoice id="selectId" value="#{tableData.selectedValue}" autoSubmit="true">
>                     <f:selectItem itemLabel="Eins" itemValue="1"/>
>                     <f:selectItem itemLabel="Zwei" itemValue="2"/>
>                 </tr:selectOneChoice>
>             </tr:subform>
>             <tr:subform>
>                 <tr:table value="#{tableData.data}" var="datum" partialTriggers=":selectForm:selectId">
>                     <tr:column headerText="Name">
>                         <tr:inputText value="#{datum.name}"/>
>                     </tr:column>
>                     <tr:column headerText="Count">
>                         <h:inputText value="#{datum.count}"/>
>                     </tr:column>
>                 </tr:table>
>             </tr:subform>
>         </tr:form>
>     </trh:body>
> </html>{code}
> This is the same page using only pure JSF without PPR, no autosubmit. It is working fine:
> {code:html}<?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
>       xmlns:ui="http://java.sun.com/jsf/facelets"
>       xmlns:f="http://java.sun.com/jsf/core"
>       xmlns:h="http://java.sun.com/jsf/html"
>       xmlns:tr="http://myfaces.apache.org/trinidad"
>       xmlns:trh="http://myfaces.apache.org/trinidad/html">
>     <trh:head title="m/score/engine"/>
>     <trh:body>
>         <tr:messages globalOnly="true"/>
>         <h:form>
>             <h:selectOneMenu value="#{tableData.selectedValue}">
>                 <f:selectItem itemLabel="Eins" itemValue="1"/>
>                 <f:selectItem itemLabel="Zwei" itemValue="2"/>
>             </h:selectOneMenu>
>             <tr:commandButton text="Refresh Table"/>
>         </h:form>
>         <h:form>
>             <h:dataTable value="#{tableData.data}" var="datum">
>                 <h:column>
>                     <f:facet name="header">
>                         <h:outputText value="Name"/>
>                     </f:facet>
>                     <h:inputText value="#{datum.name}"/>
>                 </h:column>
>                 <h:column>
>                     <f:facet name="header">
>                         <h:outputText value="Count"/>
>                     </f:facet>
>                     <h:inputText value="#{datum.count}"/>
>                 </h:column>
>             </h:dataTable>
>         </h:form>
>     </trh:body>
> </html>
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (TRINIDAD-750) PPR does not R: Table rows are not refreshed

Posted by "Stephen Friedrich (JIRA)" <de...@myfaces.apache.org>.
    [ https://issues.apache.org/jira/browse/TRINIDAD-750?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12531654 ] 

Stephen Friedrich commented on TRINIDAD-750:
--------------------------------------------

After further research: It is not caused by PPR, but by using subforms.

This code works:
    <trh:body>
        <tr:messages globalOnly="true"/>

        <tr:form partialTriggers=":selectId">
                <tr:selectOneChoice id="selectId" value="#{tableData.selectedValue}" autoSubmit="true">
                    <f:selectItem itemLabel="Eins" itemValue="1"/>
                    <f:selectItem itemLabel="Zwei" itemValue="2"/>
                </tr:selectOneChoice>

                <tr:table value="#{tableData.data}" var="datum">
                    <tr:column id="cn" headerText="Name">
                        <tr:inputText id="cin" value="#{datum.name}"/>
                    </tr:column>

                    <tr:column id="cc" headerText="Count">
                        <h:inputText id="cic" value="#{datum.count}"/>
                    </tr:column>

                </tr:table>

        </tr:form>
    </trh:body>

However I'd really rather use the subforms: I do not want to submit the table data along with the dropdown selection.
So what is the desired behaviour for subform children: Should they be updated on the response page?

The current behaviour is definitely not desirable: Only updating them partially.

> PPR does not R: Table rows are not refreshed
> --------------------------------------------
>
>                 Key: TRINIDAD-750
>                 URL: https://issues.apache.org/jira/browse/TRINIDAD-750
>             Project: MyFaces Trinidad
>          Issue Type: Bug
>    Affects Versions: 1.0.3-core
>            Reporter: Stephen Friedrich
>            Priority: Critical
>
> I try to implement a table with inline editing.
> In a checkbox above the table I initially select a value (a department in my real app) which populates the table via autosubmit.
> However I have not managed to get it working. PPR does not recognize that it must update the individual table rows.
> It only adds/removes rows if the row count changed, but is always showing the very same value, even if they changed on the server.
> I coded an example to show the problem:
> Simple bean:
> {code}package com.corejsf;
> public class Datum {
>     private String name;
>     private int count;
>     public Datum(String name, int count) {
>         this.name = name;
>         this.count = count;
>     }
>     public String getName() { return name; }
>     public void setName(String name) { this.name = name; }
>     public int getCount() { return count; }
>     public void setCount(int count) { this.count = count; }
> }{code}
> Bean that provides the table date (you may just replace the seam component definition with a JSF managed bean:
> {code}package com.corejsf;
> import org.jboss.seam.ScopeType;
> import org.jboss.seam.annotations.Name;
> import org.jboss.seam.annotations.Scope;
> import java.util.Random;
> @Name("tableData")
> @Scope(ScopeType.SESSION)
> public class TableData {
>     private Random random = new Random();
>     private Datum[] data;
>     private String selectedValue = "2";
>     public TableData() {
>         refresh();
>     }
>     public Datum[] getData() { return data; }
>     public void setSelectedValue(String selectedValue) {
>         this.selectedValue = selectedValue;
>         refresh();
>     }
>     public String getSelectedValue() { return selectedValue; }
>     public void refresh() {
>         int i = random.nextInt(4);
>         int length = i == 3 ? 4 : 3;
>         data = new Datum[length];
>         for (int i1 = 0; i1 < data.length; i1++) {
>             data[i1] = new Datum(Character.toString((char) ('A' + random.nextInt(26))), random.nextInt(100) + 1);
>         }
>     }
> }
> {code}
> This is my page (using facelets). When you change the selection in the dropwdown the table data is randomly changed and sometimes the row count is changed from 3 to 4 or back. PPR is working somehow: The table will add/delete the additional row. But it will never show current values:
> {code:html}<?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
>       xmlns:ui="http://java.sun.com/jsf/facelets"
>       xmlns:f="http://java.sun.com/jsf/core"
>       xmlns:h="http://java.sun.com/jsf/html"
>       xmlns:tr="http://myfaces.apache.org/trinidad"
>       xmlns:trh="http://myfaces.apache.org/trinidad/html">
>     <trh:head/>
>     <trh:body>
>         <tr:messages globalOnly="true"/>
>         <tr:form>
>             <tr:subform id="selectForm">
>                 <tr:selectOneChoice id="selectId" value="#{tableData.selectedValue}" autoSubmit="true">
>                     <f:selectItem itemLabel="Eins" itemValue="1"/>
>                     <f:selectItem itemLabel="Zwei" itemValue="2"/>
>                 </tr:selectOneChoice>
>             </tr:subform>
>             <tr:subform>
>                 <tr:table value="#{tableData.data}" var="datum" partialTriggers=":selectForm:selectId">
>                     <tr:column headerText="Name">
>                         <tr:inputText value="#{datum.name}"/>
>                     </tr:column>
>                     <tr:column headerText="Count">
>                         <h:inputText value="#{datum.count}"/>
>                     </tr:column>
>                 </tr:table>
>             </tr:subform>
>         </tr:form>
>     </trh:body>
> </html>{code}
> This is the same page using only pure JSF without PPR, no autosubmit. It is working fine:
> {code:html}<?xml version="1.0" encoding="utf-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
>       xmlns:ui="http://java.sun.com/jsf/facelets"
>       xmlns:f="http://java.sun.com/jsf/core"
>       xmlns:h="http://java.sun.com/jsf/html"
>       xmlns:tr="http://myfaces.apache.org/trinidad"
>       xmlns:trh="http://myfaces.apache.org/trinidad/html">
>     <trh:head title="m/score/engine"/>
>     <trh:body>
>         <tr:messages globalOnly="true"/>
>         <h:form>
>             <h:selectOneMenu value="#{tableData.selectedValue}">
>                 <f:selectItem itemLabel="Eins" itemValue="1"/>
>                 <f:selectItem itemLabel="Zwei" itemValue="2"/>
>             </h:selectOneMenu>
>             <tr:commandButton text="Refresh Table"/>
>         </h:form>
>         <h:form>
>             <h:dataTable value="#{tableData.data}" var="datum">
>                 <h:column>
>                     <f:facet name="header">
>                         <h:outputText value="Name"/>
>                     </f:facet>
>                     <h:inputText value="#{datum.name}"/>
>                 </h:column>
>                 <h:column>
>                     <f:facet name="header">
>                         <h:outputText value="Count"/>
>                     </f:facet>
>                     <h:inputText value="#{datum.count}"/>
>                 </h:column>
>             </h:dataTable>
>         </h:form>
>     </trh:body>
> </html>
> {code}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.