小编Gar*_*gos的帖子

gwt - 在RPC调用中使用List <Serializable>?

我有一个RPC服务,使用以下方法:

public List<Serializable> myMethod(TransactionCall call) {...}
Run Code Online (Sandbox Code Playgroud)

但是在分析此方法时我收到警告,然后rpc调用失败

Analyzing 'my.project.package.myService' for serializable types
Analyzing methods:
public abstract java.util.List<java.io.Serializable> myMethod(my.project.package.TransactionCall call)
Return type: java.util.List<java.io.Serializable>
[...]
java.io.Serializable
Verifying instantiability
(!) Checking all subtypes of Object wich qualify for serialization
Run Code Online (Sandbox Code Playgroud)

似乎我不能将Serializable用于我的List ...我可以使用我自己的界面(类似于AsyncDataInterface,它实现了Serializable接口),但事实是我的方法将返回一个列表自定义对象和基本对象(如as Strings,int ....).

所以我的问题是:

  • 这是一种标准行为吗?(我无法弄清楚为什么我不能在这种情况下使用这个界面)
  • 有没有人有针对这种情况的解决方法?

java gwt serialization rpc gwt-rpc

14
推荐指数
1
解决办法
9663
查看次数

GWT TypeOracle.getTypes不返回所有类型

我有一个自定义生成器,只为我的项目中的某些类生成代码.下面的代码位于generate方法的开头,并将我需要处理的所有类放在clazzes列表中

TypeOracle oracle = context.getTypeOracle();
JClassType markerInterfaceType = oracle.findType(MY_PARENT_CLASS.class.getName());
List<JClassType> clazzes = new ArrayList<JClassType>();
for (JClassType classType : oracle.getTypes()) {
  if (!classType.equals(markerInterfaceType)
      && classType.isAssignableTo(markerInterfaceType)) {
    clazzes.add(classType);
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码已经保存了一年多,但自上周以来,似乎发电机没有考虑到几个等级.

经过一番挖掘,我发现那些类甚至不在返回的列表中 oracle.getTypes()

  • 那些被忽略的类不是新创建的类(有些类在几个月内保持不变)
  • 据我所知,没有办法区分将被忽略的类与任何其他类
  • 我们的gwt版本没有升级(我们中的一些人使用2.5.0,其他人使用2.5.1)
  • 这些类使用的包也没有升级
  • oracle.findType(MISSING_CLASS.class.getName()) 回报 null
  • 问题只出现在某些人身上,但不会出现在同一个课程上
  • 重命名有问题的类似乎可以解决问题

我最好的猜测是我在某处有缓存问题,但我不知道在哪里看.

java gwt types code-generation

8
推荐指数
1
解决办法
529
查看次数

GWT - 检索未显示的窗口小部件的大小

我需要设置absolutePanel的大小与其子大小有关,但getOffset*方法返回0,因为(我认为)孩子还没有显示.

一个简单的例子:

AbsolutePanel aPanel = new AbsolutePanel();
HTML text = new HTML(/*variable lenght text*/);
int xPosition = 20; // actually variable
aPanel.add(text, xPosition, 0);
aPanel.setSize(xPosition + text .getOffsetWidth() + "px", "50px"); // 20px 50px
Run Code Online (Sandbox Code Playgroud)

我还可以通过使用AbsolutePanel大小来设置子位置和大小来解决我的问题:

AbsolutePanel aPanel = new AbsolutePanel();
aPanel.setSize("100%", "50px");
HTML text = new HTML(/*variable lenght text*/);
int xPosition = aPanel.getOffsetWidth() / 3; // Once again, getOffsetWidth() returns 0;
 aPanel.add(text, xPosition, 0);
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我必须找到一种方法:

  • 检索尚未显示的窗口小部件的大小
  • 在显示小部件时收到通知

gwt

6
推荐指数
1
解决办法
7217
查看次数

eclipse - 正则表达式:替换多个组

someText
1
2
3
4
moreText
Run Code Online (Sandbox Code Playgroud)

我想在每个数字之前添加一个前缀.

但是使用(\w+\R)(\d+\R)+(\w+)并且\1prefix\2\3只会在最后一位数字前加上并删除其他数字.

有没有办法用一个正则表达式做或者我应该在旁边写一个脚本?

regex eclipse replace

5
推荐指数
1
解决办法
1963
查看次数

GWT - 在使用places/activities/mappers时我应该在哪里使用代码拆分?

"core"指的是加载的应用程序的初始部分.

  • 为了将url绑定到地方,GWT使用PlaceTokenizer<P extends Place>.从url加载应用程序时,它调用方法P getPlace(String token)来检索要调用的场所的新实例.

    由于代码拆分的异步性质,我无法runAsync在此方法中创建一个位置.所以我必须把我的应用程序的所有位置放在核心.

  • 为了将场所链接到活动,GWT调用Activity getActivity(Place place)(from com.google.gwt.activity.shared.ActivityMapper)来检索活动的新实例.

    再次,我必须把我所有的活动放在核心.

这是我想尝试什么:编写一个自定义com.google.gwt.place.shared.Delegate的是

  • 绑定自己PlaceChangeRequestEvent.如果未加载与requestedPlace对应的AppPiece,则调用event.setWarning(NEED_TO_LOAD_MODULE)
  • 在该confirm(String message)方法中,当消息等于(因此它不打扰用户)时总是返回false NEED_TO_LOAD_MODULE,并通过加载模块RunAsync.
  • 加载模块后,请致电 goTo(requestedPlace)

我的应用程序的每个AppPiece包含一堆活动和相应的视图.由于映射器仅在PlaceChangeEvent被触发时被调用,因此我可以通过生成我的活动的新实例AppPiece.getSomeActivityInstance().

我很确定这会起作用,但让我困扰的是那个

  • 根据requestedPlace查找要加载的AppPiece将迫使我编写与我的映射器非常相似的代码
  • 我想把我的位置放在相应的AppPiece中
  • Delegate为此目的的压倒是棘手的,我正在寻找更好的解决方案

gwt asynchronous gwt-mvp

4
推荐指数
1
解决办法
1235
查看次数