我試圖訪問一個界面內某些對象:粘合劑成分,但不知道如何訪問eventBus,requestFactory等,而無需編寫討厭的代碼,將晚上讓我保持清醒(還要注意我對JAVA完全陌生,背景是Perl/Python/PHP)。Spring Roo的GWT與通過UI創建的小部件GIN注:粘結劑
我ui.xml文件:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:ig='urn:import:com.ig.client.scaffold.ui.widget'>
<ui:style>
...
</ui:style>
<g:HorizontalPanel>
...
</g:HorizontalPanel>
</ui:UiBinder>
注射這種方式失敗, com.ig.client.scaffold.ui.widget.R的eventBus沒有默認的(零個參數)構造函數。
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
@Inject
public R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
}
所以,按照錯誤信息,我創建了一個UIFactory,然後我得到一個錯誤 ...... '{} style.entityComponent'>缺少必需的屬性(S):eventBus元...(好像它正試圖找到UI中的eventBus:粘結劑樣式
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
public @UiConstructor R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
@Inject
@UiFactory R makeR(){
return new R(eventBus);
}
}
讀取和讀取和過去幾天的時間看書,我還沒有看到任何人訪問eventBus,requestFactory和historyController直接在綁定到ui:binder widget的視圖中,這導致了這樣的結論:它可能不是最佳實踐 a nyway。
比方說,我有一個oject,姑且稱之爲代理,代理包含handleButtonClick然後調用eventBus.doSomething()。如何將此代理對象鏈接到ui:活頁夾小部件,而無需實例化它或不必將它傳遞給每個小部件?
是否有可能做一個接口上GIN注入,然後通過實施R級是接口,那麼這將在某種程度上包含我要尋找的對象?
的任何解決方案,它的工作是值得歡迎的,只是尋找一個樣本(一個Java的n00b可以理解),將基本上允許我前端與ROO創建的服務的其餘部分連接。
感謝 Ĵ
感謝傑森,我是通過谷歌代碼的MVP文檔早上讀,它似乎正是我一直在尋找,後來將實施今晚。 感謝百萬:-) – 2011-01-10 09:09:09