2010-11-17 4 views
14

Что может быть предоставлен атрибутомGWT 2.1 UiBinder SimplePager требует атрибута местоположения

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

I судимого центр города, но это не работал, я вижу в примере приложении расходов, что они не имеют атрибут местоположения но вместо этого установите его на создание его в UiBinder. Но я не могу это сделать, так как это необходимый атрибут. Что делать?

+0

У меня нет никаких проблем с этим, <с: SimplePager щ: поле = «пейджера» Location = «CENTER» /> работает –

ответ

24

Вы должны предоставить SimplePager.TextLocation, который может быть CENTER, влево или вправо.

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

Если я делаю это так, и я попытался получить другую ошибку, я вижу, когда я получаю доступ к ноутбуку с моим проектом, что именно это. – rapadura

+0

Я получил эту ошибку, если добавлю атрибут location: [ERROR] Класс SimplePager не имеет соответствующего метода setLocation() Элемент (: 12) – tbruyelle

+0

Может быть, потому что порядка элементов. Немного поздний ответ, но может сэкономить время. ui: поле должно быть до местоположения, я думаю. –

5

Единственное решение, которое я вижу на данный момент, работает с @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"); 
    } 
} 
+1

Да, я сделал это, как это тоже, что это не элегантное решение и все еще моя IDE (Intelij) говорит, что в SimplePager есть обязательное поле, но, как ни странно, он компилируется и запускается без проблем. Я думаю, что это странно, что вы можете сделать pager = new SimplePager(); <- не вызывает конструктор, который указывает TextLocation или его установку, но тег SimplePager ui терпит неудачу. Это должно быть ошибка, не так ли, z00bs? – rapadura

1

Класс SimplePager не может быть реализован с помощью UiBinder, потому что он не имеет сеттеров для размещения, чтобы исправить ошибку.

Альтернатива @UiField (при условии = true), которая позволяет автоматически создавать переменную, путем создания фабричного метода для указания страницы за пределами UiBinder о том, как создать экземпляр и при необходимости настроить объект.

Вот пример заводского метода, который он применит к любому классу @UiField SimplePager. @UiField (при условии = true) будет обрабатывать несколько различных экземпляров, но для одного UiFactory является самым простым, потому что вам не нужно беспокоиться о том, когда используется переменная.

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