【问题标题】:GWT 2.1 UiBinder SimplePager requires location attributeGWT 2.1 UiBinder SimplePager 需要 location 属性
【发布时间】:2011-05-11 10:27:43
【问题描述】:

可以为位置属性提供什么

<c:SimplePager ui:field='pager' location='HERE' /> 

我尝试了 CENTER,但它不起作用,我在费用示例应用程序中看到它们没有位置属性,而是在 UiBinder 中创建它时设置它。但我不能这样做,因为它是必需的属性。 怎么办?

【问题讨论】:

  • 我没问题, 运行

标签: gwt uibinder gwt2


【解决方案1】:

UiBinder 无法实例化 SimplePager 类,因为它没有用于修复错误的 Location 设置器。

@UiField(provided=true) 的替代方法是通过创建工厂方法来指示 UiBinder 外部的页面如何实例化以及在需要时设置对象,它允许自动实例化变量。

这是一个工厂方法示例,它将应用于任何@UiField SimplePager 类。 @UiField(provided=true) 可以处理多个不同的实例化,但其中一个 UiFactory 是最简单的,因为您不必关心何时使用变量。

@UiFactory SimplePager createSimplePager() {
    return new SimplePager(TextLocation.CENTER);
}

【讨论】:

    【解决方案2】:

    您必须提供SimplePager.TextLocation,可以是 CENTER、LEFT 或 RIGHT。

    <c:SimplePager ui:field='pager' location='CENTER'/>
    

    【讨论】:

    • 如果我这样做,并且我已经尝试过,我会收到另一个错误,我会看看当我可以访问带有我的项目的笔记本电脑时它到底是什么。
    • 如果我添加 location 属性会出现此错误:[错误] 类 SimplePager 没有适当的 setLocation() 方法元素 ( :12)
    • 可能是因为元素的顺序。响应有点晚,但可以节省一些时间。 ui:field 应该在我认为的位置之前。
    【解决方案3】:

    我目前看到的唯一解决方案是使用@UiField(provided = true)。不确定这是否有任何帮助,但请查看下面的小示例。

    ui.xml:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
    <ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui"
        xmlns:c="urn:import:com.google.gwt.user.cellview.client">
        <ui:style>
    
        </ui:style>
        <g:HTMLPanel>
            <c:CellList ui:field="list" />
            <c:SimplePager ui:field="pager" />
            <g:Button ui:field="more" text="addMore" />
        </g:HTMLPanel>
    </ui:UiBinder>
    

    和小部件:

    public class TestView extends Composite {
    
        private static TestViewUiBinder uiBinder = GWT.create(TestViewUiBinder.class);
    
        interface TestViewUiBinder extends UiBinder<Widget, TestView> {}
    
        @UiField(provided = true)
        CellList<String> list;
        @UiField(provided = true)
        SimplePager pager;
        @UiField
        Button more;
        private int counter = 0;
        private ListDataProvider<String> provider;
    
        public TestView() {
            list = new CellList<String>(new TextCell());
            pager = new SimplePager();
            initWidget(uiBinder.createAndBindUi(this));
            provider = new ListDataProvider<String>(getList());
            provider.addDataDisplay(list);
            pager.setDisplay(list);
            pager.setPageSize(5);
        }
    
        private LinkedList<String> getList() {
            LinkedList<String> list = new LinkedList<String>();
            list.add("1st");
            list.add("2nd");
            list.add("3rd");
            list.add("4th");
            list.add("5th");
            return list;
        }
    
        @UiHandler("more")
        void onMoreClick(ClickEvent event) {
            provider.getList().add(++counter + " more");
        }
    }
    

    【讨论】:

    • 是的,我也这样做了,这不是一个优雅的解决方案,我的 IDE (Intelij) 仍然说 SimplePager 上有一个必填字段,但奇怪的是它编译并运行没有问题。我认为你可以这样做很奇怪 pager = new SimplePager();
    猜你喜欢
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2017-06-15
    • 2012-04-06
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多