GWT 2.5-rc1 feature uirender is not working as expected.

343 views
Skip to first unread message

Vasu

unread,
Jul 18, 2012, 12:44:07 AM7/18/12
to google-we...@googlegroups.com
I tried to create a sample by using UiRenderer. But Showing null values as result. And as the UiRenderer code implementation is generated I am not even able to debug it. Following is the sample I tried.

Person.java
--------------------------------------------------------------------------------------------------------------------------
public class Person {

    private String    fname;
    private String    lname;
    private String    emailid;
    private int        age;

    /**
     * @return the fname
     */
    public String getFname() {
        return fname;
    }

    /**
     * @param fname
     *            the fname to set
     */
    public void setFname(String fname) {
        this.fname = fname;
    }

    /**
     * @return the lname
     */
    public String getLname() {
        return lname;
    }

    /**
     * @param lname
     *            the lname to set
     */
    public void setLname(String lname) {
        this.lname = lname;
    }

    /**
     * @return the emailid
     */
    public String getEmailid() {
        return emailid;
    }

    /**
     * @param emailid
     *            the emailid to set
     */
    public void setEmailid(String emailid) {
        this.emailid = emailid;
    }

    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }

    /**
     * @param age
     *            the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }

}
--------------------------------------------------------------------------------------------------------------------------


PersonCell.ui.xml
--------------------------------------------------------------------------------------------------------------------------
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
    <ui:with field='person' type='com.sample.renderer.Person' />

    <div>
        First Name :
        <span>
            <ui:text from='{person.getFname}' />
        </span>
        <p>
            Last Name :
            <span>
                <ui:text from='{person.getLname}' />
            </span>
        </p>
        <p>
            Email :
            <span>
                <ui:text from='{person.getEmailid}' />
            </span>
        </p>
    </div>
</ui:UiBinder>
--------------------------------------------------------------------------------------------------------------------------

PersonCell.java
--------------------------------------------------------------------------------------------------------------------------
public class PersonCell extends AbstractCell<Person> {

    interface MyUiRenderer extends UiRenderer {
        void render(SafeHtmlBuilder sb, Person person);
    }

    private static MyUiRenderer    renderer    = GWT.create(MyUiRenderer.class);

    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context, Person value, SafeHtmlBuilder sb) {
        renderer.render(sb, value);
    }

}
--------------------------------------------------------------------------------------------------------------------------

onModuleLoad implementation

--------------------------------------------------------------------------------------------------------------------------
        PersonCell cell = new PersonCell();
        CellList<Person> cellList = new CellList<Person>(cell);
        List<Person> list = new ArrayList<Person>();
        Person p = new Person();
        p.setFname("Pranoti");
        p.setLname("Patil");
        p.setEmailid("pra.....@gmail.com");
        p.setAge(30);
        list.add(p);

        p = new Person();
        p.setFname("Pandurang");
        p.setLname("Patil");
        p.setEmailid("pa.....@gmail.com");
        p.setAge(30);
        list.add(p);

        p = new Person();
        p.setFname("Ravi");
        p.setLname("Kumar");
        p.setEmailid("ra.....@gmail.com");
        p.setAge(30);
        list.add(p);

        cellList.setRowCount(list.size(), true);
        cellList.setRowData(list);

        RootPanel.get().add(cellList);

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


output:

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

First Name : null

Last Name : null

Email : null
First Name : null

Last Name : null

Email : null
First Name : null

Last Name : null

Email : null
--------------------------------------------------------------------------------------------------------------------------


            Any help would be much appriciated. I am not getting if I am missing something. Even I tried the sample given on GWT documenntation located at refer, getting similar results.

           When I tried to debug above code by applying break points inside redner() method of PersonCell, to check if I get required object over there, while it renders every cell. And I am able to see proper object is getting passed over there. But When apply break point in any of the getter of Person class, and try to see what value person object has. Then it is surprising to see it has all null values. Need to understand if its bug in GWT library or I am missing anything while using it.


Thanks,
-Pandurang Patil.

Thomas Broyer

unread,
Jul 18, 2012, 12:37:07 PM7/18/12
to google-we...@googlegroups.com
Just a wild guess: try to remove the type="" on your ui:with. Maybe the generator is confused and thinks it has to instantiate a Person object (what would normally be done with UiBinder), in which case it's no surprise that the Person's properties are all 'null'.
BTW, to debug generated code, pass the "-gen someFolder" to the DevMode or Compiler so that it's output to disk, and then add the "someFolder" folder to the "sources" of your Eclipse launcher (or whatever the equivalent in your IDE if not using Eclipse). You'll then be able to step into the generated code.

Vasu

unread,
Jul 18, 2012, 11:15:13 PM7/18/12
to google-we...@googlegroups.com
Thanks Thomas,
         But I guess if we remove the type, validation will fail to validate .ui.xml. Still will try and let you know the results.

Thanks,
-Pandurang

Vasu

unread,
Jul 18, 2012, 11:36:13 PM7/18/12
to google-we...@googlegroups.com
Yes you were right, it is instantiating new Person object. But if I try to set Type to empty string validation fails and I cannot run the application. When I looked at generated code it is creating new Person object and using it. I even tried below code just if it works using @uiFactory. But even it doesn't seems to be working.

PersonCell.java
--------------------------------------------------------------------------------------------------------------------------


public class PearsonCell extends AbstractCell<Person> {

    interface MyUiRenderer extends UiRenderer {
        void render(SafeHtmlBuilder sb, Person pearson);

    }

    private static MyUiRenderer    renderer    = GWT.create(MyUiRenderer.class);

    private Person                person;


    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context, Person value, SafeHtmlBuilder sb) {
        person = value;
        renderer.render(sb, value);
    }

    @UiFactory
    /* this method could be static if you like */
    public Person getResources() {
        return person;
    }

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

Thanks,
-Pandurang.

Thomas Broyer

unread,
Jul 19, 2012, 4:04:11 AM7/19/12
to google-we...@googlegroups.com


On Thursday, July 19, 2012 5:36:13 AM UTC+2, Vasu wrote:
Yes you were right, it is instantiating new Person object. But if I try to set Type to empty string validation fails and I cannot run the application.

I didn't mean to set it to the empty string, but to not use the attribute: <ui:with field="person" />

Vasu

unread,
Jul 23, 2012, 11:11:19 PM7/23/12
to google-we...@googlegroups.com

Yea !!!! you are absolutely right. It worked when I removed type attribute from <ui:with > tag. I was wondering it has to identify type to call respective methods on the same and I realized that it tries to match the variable name with that of name of the parameter to render method (which I marked in blue color in below code).

----------------------------------------------------------------------------------------------------------------------------------------------
interface MyUiRenderer extends UiRenderer {
        void render(SafeHtmlBuilder sb, Person person);
    }
----------------------------------------------------------------------------------------------------------------------------------------------


So Finally working code looks like this.


PersonCell.java
----------------------------------------------------------------------------------------------------------------------------------------------


public class PearsonCell extends AbstractCell<Person> {


    interface MyUiRenderer extends UiRenderer {
        void render(SafeHtmlBuilder sb, Person person);

    }

    private static MyUiRenderer    renderer    = GWT.create(MyUiRenderer.class);

    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context, Person value, SafeHtmlBuilder sb) {
        renderer.render(sb, value);
    }

}

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

PersonCell.ui.xml
----------------------------------------------------------------------------------------------------------------------------------------------

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
    <ui:with field='person' />

    <div>
        First Name :
        <span>
            <ui:text from='{person.getFname}' />
        </span>
        <p>
            Last Name :
            <span>
                <ui:text from='{person.getLname}' />
            </span>
        </p>
        <p>
            Email :
            <span>
                <ui:text from='{person.getEmailid}' />
            </span>
        </p>
    </div>
</ui:UiBinder>
----------------------------------------------------------------------------------------------------------------------------------------------

Thanks Thomas for your valuable inputs. Without that it would have been painful to identify the issue.

Thanks,
-Pandurang.

Rodrigo Chandia

unread,
Jul 24, 2012, 3:27:29 PM7/24/12
to google-we...@googlegroups.com
Hmm, this seems like a bug to me. Hopefully I'll have a fix ready for rc2.


--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/K3xzMkkBptoJ.

To post to this group, send email to google-we...@googlegroups.com.
To unsubscribe from this group, send email to google-web-tool...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.



--
Rodrigo Chandia | Software Engineer | rcha...@google.com | 678 7431725

Rodrigo Chandia

unread,
Jul 25, 2012, 5:11:03 PM7/25/12
to google-we...@googlegroups.com
I think this patch (under review) fixes this issue:

http://gwt-code-reviews.appspot.com/1794803

On Tuesday, July 24, 2012 3:27:29 PM UTC-4, Rodrigo Chandia wrote:
Hmm, this seems like a bug to me. Hopefully I'll have a fix ready for rc2.

Vasu

unread,
Jul 26, 2012, 8:26:22 AM7/26/12
to google-we...@googlegroups.com
Woow.. really quick thanks Rodrigo. Also would like to thanks Thomas for giving right direction.

Aleksey Popryadukhin

unread,
Nov 25, 2014, 1:45:22 PM11/25/14
to google-we...@googlegroups.com
Hi all.

I'm see this old topic but I stuck with this problem. I tried to remove the type tag but I'm getting an error anyway in compile time. @UiFactory either not working. Any clue?

четверг, 26 июля 2012 г., 15:26:22 UTC+3 пользователь Vasu написал:

पांडुरंग पाटिल

unread,
Nov 27, 2014, 2:06:04 AM11/27/14
to google-we...@googlegroups.com
you need to provide your code snippets which will enable us to help you.

--
You received this message because you are subscribed to a topic in the Google Groups "Google Web Toolkit" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/google-web-toolkit/TWYcWRfICXk/unsubscribe.
To unsubscribe from this group and all its topics, send an email to google-web-tool...@googlegroups.com.

To post to this group, send email to google-we...@googlegroups.com.

Aleksey Popryadukhin

unread,
Nov 28, 2014, 9:57:11 AM11/28/14
to google-we...@googlegroups.com
Thank you for answer.

Sorry for response delaying I tried to get GWT 2.8-SNAPSHOT.

I have such code:
PlayCell.java
public class PlayCell extends AbstractCell<PlayCellProxy> {

private static final PlayCellBinder cellRenderer = GWT.create(PlayCellBinder.class);

interface PlayCellBinder extends UiRenderer {
void render(SafeHtmlBuilder sb, PlayCellProxy myCellRenderer);
}

@Override
public void render(Context context, PlayCellProxy value, SafeHtmlBuilder sb) {
if (value == null) {
return;
}
cellRenderer.render(sb, value);
}

}

PlayCell.ui.xml

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'>
    <ui:with field='playCellProxy' type="net.rushashki.shashki64.client.cell.renderer.PlayCellProxy"/>

<div ui:field="playCell">
<div ui:field="firstName">
Title:
<ui:text from="{playCellProxy.getTitle}"/>
</div>
Player:
<ui:text from="{playCellProxy.getWhitePlayer}"/>
</div>
</ui:UiBinder>

PlayCellProxy.java
public class PlayCellProxy {

private PlayDto playDto;

public PlayCellProxy(PlayDto playDto) {
this.playDto = playDto;
}

public String getTitle() {
return playDto.getTitle();
}

public String getWhitePlayer() {
return playDto.getWhitePlayer();
}

public String getBlackPlayer() {
return playDto.getBlackPlayer();
}

public String getDeskHtml() {
return playDto.getDeskHtml();
}

}

With such code page is rendered. But fields of playCellProxy are empty.

четверг, 27 ноября 2014 г., 10:06:04 UTC+3 пользователь Vasu написал:
To unsubscribe from this group and all its topics, send an email to google-web-toolkit+unsub...@googlegroups.com.

पांडुरंग पाटिल

unread,
Nov 29, 2014, 7:22:15 AM11/29/14
to google-we...@googlegroups.com
try using the same variable name which is being passed to render method of UiRenderer interface as well as when you define the <ui:with tag> inside .ui.xml refer below highlighted code in RED colour. 

  interface PlayCellBinder extends UiRenderer {
void render(SafeHtmlBuilder sb, PlayCellProxy myCellRenderer);
}
<ui:with field='playCellProxy' type="net.rushashki.shashki64.client.cell.renderer.PlayCellProxy"/>

To unsubscribe from this group and all its topics, send an email to google-web-tool...@googlegroups.com.

Aleksey Popryadukhin

unread,
Nov 29, 2014, 7:48:35 AM11/29/14
to google-we...@googlegroups.com
It's magic! Thank you it works.

суббота, 29 ноября 2014 г., 15:22:15 UTC+3 пользователь Vasu написал:
To unsubscribe from this group and all its topics, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-we...@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages