gpt4 book ai didi

java - GWT RootLayoutPanel - 从第二个到第一个呈现页面时出现问题(第一个工作正常)

转载 作者:行者123 更新时间:2023-12-02 08:18:25 26 4
gpt4 key购买 nike

抱歉,如果之前已经回答过这个问题。我做了一些搜索,没有找到任何可以解决我的问题的方法。我使用 Spring Roo 创建了一个应用程序,然后转换为 GWT 应用程序。Spring Roo 生成的所有代码仅用于 CRUD。现在我想添加一个日历来进行约会,所以我需要移动到另一个页面。我已将此代码添加到
ScaffoldDesktopShell.java()

    public ScaffoldDesktopShell() {
initWidget(BINDER.createAndBindUi(this));
startButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
RootLayoutPanel.get().add(new NovoPainel());
}
});
}
...

然后创建一个新的 UIbinder,将其命名为 NovoPainel() 并添加以下代码:

public NovoPainel() {
initWidget(uiBinder.createAndBindUi(this));

botao.addClickHandler(new ClickHandler() {

@Override
public void onClick(ClickEvent event) {
RootLayoutPanel.get().clear();
RootLayoutPanel.get().add (new ScaffoldDesktopShell());
}
});
}

从我的根面板移动到 NovoPainel 一切都很顺利,但是当我需要返回 rootPanel 时,页面无法正确呈现。EX:不显示 ** ValuePicker ** 单击左侧面板并在中心渲染。

这是我的根面板
http://www.flickr.com/photos/martinhoarantes/5694616812/in/photostream

此图像是从 rootPanel 导航到 NovoPainel 时的图像

enter image description here

最后这个从 NovoPainel 返回到 RootPanel
enter image description here

最佳答案

您必须与 Roo 生成的架构集成,这样您仍然可以从 Roo 脚手架中受益。

Roo 生成的代码隐藏了 _Roo_Gwt 类中的大部分行为,这是因为 GWT doesn’t currently support ITDs 。因此,必须通过重写 _Roo_Gwt 类中的方法来在派生类中进行更改。

要导航应用程序,请使用 Places、ActivityMapper 和 ActivitiManager(您可以在 @Thomas Broyer posterousGWT help 上找到很好的读物)。

如果您查看ScaffoldDesktopShell.ui.xml - 页面分为三个主要区域。 Roo Scaffolded Desktop Shell areasApplicationMasterActivities 类负责主区域。

masterActivityManager.setDisplay(shell.getMasterPanel());
ScaffoldDesktopApp.init() 中的

proxyListPlacePicker 使用适当的 ProxyListPlace 生成地点更改事件。

public void onValueChange(ValueChangeEvent<ProxyListPlace> event) {
placeController.goTo(event.getValue());
}

ApplicationMasterActivities 类通过检查 ProxyListPlace 对象中包含的 EntityProxy 类型在 Master 区域创建适当的 Activity。

public Activity getActivity(Place place) {
if (!(place instanceof ProxyListPlace)) {
return null;
}
ProxyListPlace listPlace = (ProxyListPlace) place;
return new ApplicationEntityTypesProcessor<Activity>() {

@Override
public void handlePet(PetProxy isNull) {
setResult(new PetListActivity(requests, ScaffoldApp.isMobile() ? PetMobileListView.instance() : PetListView.instance(), placeController));
}

@Override
public void handleOwner(OwnerProxy isNull) {
setResult(new OwnerListActivity(requests, ScaffoldApp.isMobile() ? OwnerMobileListView.instance() : OwnerListView.instance(), placeController));
}
}.process(listPlace.getProxyClass());
}

导航是通过列出 ScaffoldApp 类中的所有 EntityProxy 创建的

protected HashSet<ProxyListPlace> getTopPlaces() {
Set<Class<? extends EntityProxy>> types = ApplicationEntityTypesProcessor.getAll();
HashSet<ProxyListPlace> rtn = new HashSet<ProxyListPlace>(types.size());

for (Class<? extends EntityProxy> type : types) {
rtn.add(new ProxyListPlace(type));
}

return rtn;
}

为了在导航菜单中输出有意义的名称,它们是使用 ApplicationListPlaceRenderer

呈现的
public String render(ProxyListPlace object) {
return new ApplicationEntityTypesProcessor<String>() {

@Override
public void handlePet(PetProxy isNull) {
setResult("Pets");
}

@Override
public void handleOwner(OwnerProxy isNull) {
setResult("Owners");
}
}.process(object.getProxyClass());
}

所以你必须创建新的 Activity 。公共(public)类 SomeActivity 扩展 Composite 实现 Activity{

private static SomeActivityUiBinder uiBinder = GWT
.create(SomeActivityUiBinder.class);

interface SomeActivityUiBinder extends UiBinder<Widget, SomeActivity> {
}

private AcceptsOneWidget display;

public SomeActivity() {
initWidget(uiBinder.createAndBindUi(this));
}

@Override
public String mayStop() {
return null;
}

@Override
public void onCancel() {
onStop();

}

@Override
public void onStop() {
this.display.setWidget(null);
}

@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
this.display = panel;
this.display.setWidget(this);
}

}


<!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">
<g:HTMLPanel>
Hello world!
</g:HTMLPanel>
</ui:UiBinder>

创建适当的EntityProxy。只是遵守ProxyListPlace机制。

public interface SomeEntityProxy extends EntityProxy {
}

在A中创建SomeActivity

@Override
public Activity getActivity(Place place) {
if (!(place instanceof ProxyListPlace)) {
return null;
}
Activity activity = super.getActivity(place);
if (activity == null) {
ProxyListPlace listPlace = (ProxyListPlace) place;
if (SomeEntityProxy.class.equals(listPlace.getProxyClass())) {
activity = new SomeActivity();
}
}
return activity;
}

ScaffoldApp 中添加导航位置或重写派生类中的 getTopPlaces。

rtn.add(new ProxyListPlace(SomeEntityProxy.class));

ApplicationListPlaceRenderer中设置正确的菜单渲染文本

@Override
public String render(ProxyListPlace object) {
String label = super.render(object);
if(label == null) {
if (SomeEntityProxy.class.equals(object.getProxyClass())) {
label = "Some activity";
}
}
return label;
}

Code in GitHub .

关于java - GWT RootLayoutPanel - 从第二个到第一个呈现页面时出现问题(第一个工作正常),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5917703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com