- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在我的 GWT 项目中制作 RPC,它正在运行,但我想以某种方式处理的数据消失了。我正在使用本地主机作为服务器。我在服务器包中有两个类:防御:
package org.elsys.salvation.server;
import org.elsys.salvation.client.Defence;
import org.elsys.salvation.client.FunctionalityManager;
public class Defences {
private ArrayList<Defence> netDefences;
private ArrayList<Defence> hardDefences;
private ArrayList<Defence> softDefences;
public Defences(FunctionalityManager fm){
netDefences = fm.getNetDefences();
hardDefences = fm.getHardDefences();
softDefences = fm.getSoftDefences();
}
public ArrayList<Defence> getNetDefences() {
return netDefences;
}
public ArrayList<Defence> getHardDefences() {
return hardDefences;
}
public ArrayList<Defence> getSoftDefences() {
return softDefences;
}
}
和 DefenceServiceImpl.java :
package org.elsys.salvation.server;
import java.util.ArrayList;
import org.elsys.salvation.client.DefenceService;
import org.elsys.salvation.client.FunctionalityManager;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
public class DefenceServiceImpl extends RemoteServiceServlet implements DefenceService {
private Defences defences;
@Override
public void saveDefences(FunctionalityManager fm) {
defences = new Defences(fm);
}
@Override
public void getHardDefences(FunctionalityManager fm) {
fm.setHardDefences(defences.getHardDefences());
}
@Override
public void getNetDefences(FunctionalityManager fm) {
fm.setNetDefences(defences.getNetDefences());
}
@Override
public void getSoftDefences(FunctionalityManager fm) {
fm.setSoftDefences(defences.getSoftDefences());
}
}
这是 DefenceService 接口(interface):
package org.elsys.salvation.client;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@RemoteServiceRelativePath("defences")
public interface DefenceService extends RemoteService {
void saveDefences(FunctionalityManager fm);
void getHardDefences(FunctionalityManager fm);
void getNetDefences(FunctionalityManager fm);
void getSoftDefences(FunctionalityManager fm);
}
和 DefenceServiceAsync:
package org.elsys.salvation.client;
import com.google.gwt.user.client.rpc.AsyncCallback;
public interface DefenceServiceAsync {
void saveDefences(FunctionalityManager fm, AsyncCallback<Void> callback);
void getHardDefences(FunctionalityManager fm, AsyncCallback<Void> callback);
void getNetDefences(FunctionalityManager fm, AsyncCallback<Void> callback);
void getSoftDefences(FunctionalityManager fm, AsyncCallback<Void> callback);
}
这是我调用 saveDefences 方法的代码:
private void addDiploma() {
final AsyncCallback<Void> callback = new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
}
@Override
public void onSuccess(Void result) {
SC.say("Submited");
}
};
some code...
Button submitButton = new Button("Submit");
submitButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
FM.getDiploma(projectNameTextBox, diplomantsNameTextBox,
diplomaLeadersListBox, reviewersListBox,
specialtiesComboBox, typeComboBox);
FM.generateDefences();
defenceSvc.saveDefences(FM,callback);
RootPanel.get("mainDiv").clear();
showDefences();
}
});
some more code...
}
下面是FM和defenceSvc的定义:
public FunctionalityManager FM = new FunctionalityManager();
private DefenceServiceAsync defenceSvc = GWT.create(DefenceService.class);
这里是我想将保存的数据返回给客户端的地方:
protected void showDefence() {
FunctionalityManager funcM = new FunctionalityManager();
final AsyncCallback<Void> callback = new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
}
@Override
public void onSuccess(Void result) {
// TODO Auto-generated method stub
}
};
defenceSvc.getHardDefences(funcM, callback);
defenceSvc.getNetDefences(funcM, callback);
defenceSvc.getSoftDefences(funcM, callback);
final ListGrid DiplomaGrid = new ListGrid();
DiplomaGrid.setWidth(500);
DiplomaGrid.setHeight(224);
DiplomaGrid.setShowAllRecords(true);
DiplomaGrid.setCanEdit(true);
DiplomaGrid.setEditEvent(ListGridEditEvent.CLICK);
DiplomaGrid.setModalEditing(true);
DiplomaData dd= new DiplomaData(funcM);
ListGridField nameField = new ListGridField("name", "Project Name");
ListGridField diplomantsField = new ListGridField("diplomants", "Diplomants");
ListGridField leaderField = new ListGridField("leader", "Leader");
ListGridField reviewerField = new ListGridField("reviewer", "Reviewer");
ListGridField typeField = new ListGridField("type", "Type");
ListGridField dateField = new ListGridField("date", "Date");
DiplomaGrid.setFields(new ListGridField[] {nameField, diplomantsField, leaderField,reviewerField, typeField, dateField});
DiplomaGrid.setData(dd.getRecords());
RootPanel.get("mainDiv").add(DiplomaGrid);
}
web.xml:
<servlet>
<servlet-name>defenceServiceImpl</servlet-name>
<servlet-class>org.elsys.salvation.server.DefenceServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>defenceServiceImpl</servlet-name>
<url-pattern>/salvation/defences</url-pattern>
</servlet-mapping>
当我在开发模式下运行它时,它正在运行,但是当我调用 showDefence() 方法时,我无法检索服务器数据上的序列化。谁能告诉我问题出在哪里?
最佳答案
在服务器端,您正在修改 FM,但您没有将其发送回客户端:那是行不通的。客户端和服务器之间的对象传递是通过复制(序列化→反序列化)进行的,因此在服务器上进行更改只会影响服务器端的副本。您无法通过将对象发送到服务器来更新对象;您正在发送它的副本,然后服务器必须发回另一个应用了更改的副本。
换句话说,对于您的代码,将方法的返回类型从 void
更改为调频,让服务器返回调频传递的参数,并在客户端,在onSuccess
方法,使用结果更新您的 singleton 对象(在 setHardDefences
的回调中,将 FM 的 hardDefences
设置为服务器返回的 FM 中的 hardDefences
;对于其他 < em>防御)。
关于java - GWT RPC 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10684052/
RPC 在消息传递方面的缺点是什么? 最佳答案 您是在谈论 RPC 与消息传递吗?就像(通常)异步消息传递一样?如果这就是您所说的,那么消息传递往往会以复杂性和额外基础架构为代价变得更加健壮。 最简单
我想查看不在我钱包中的btc地址余额。似乎像 blockchainexplorer 这样的网站会做这类事情。他们还提供 API,但我遇到了他们的 API 使用限制。所以我下载了完整的区 block 链
我想获得这样的 RPC 信息: > show route output interface ae40.4181 | display xml rpc
我从我的 javascript 发送交易 Metamask 打开传输对话框 我确定 i get an error message in metamask (inpage.js:1 MetaMask -
有一个场景,客户端通过 RPC 触发 cordapp 并等待结果。 rpcConnection.proxy .startFlow(::ImportAssetFlow, importDto) .retu
super 简单的问题,我在那里找不到具体的答案。 RabbitMQ 在处理 HTTP 请求时是否适合做类似 RPC 的操作? 我有兴趣在收到用户 HTTP 请求时触发一条消息,等待来自后端服务器的响
在为我的网站编写 pingback 处理程序的过程中,我注意到 XML-RPC specification没有说明应该定义什么故障代码及其含义。所以问题是,是否有一个普遍接受的故障代码标准来指定这些信
我正在尝试创建一个可以演示 Telegram API 某些功能的小程序。我希望能够通过 SMS 注册和验证用户。根据user authorization guide ,我需要调用 auth.sendC
我将实现 JSON-RPC Web 服务。我需要这方面的规范。到目前为止,我只找到了一种可以称为真正规范的资源: JSON-RPC 1.0 http://json-rpc.org/wiki/speci
我需要学习Apache Thrift一个大学项目。这样tutorial说,它是一个 RPC 框架,也是我能找到的除 their documentation 之外的 Thrift 的唯一文档。 . 有人
我有一个多服务器多客户端应用程序,我想保留一些由单个守护进程管理的公共(public)数据(以避免并发的噩梦),这样服务器就可以在需要操作共享数据时询问它。 我已经在服务器中使用 libevent,所
我在我的代码中做了一个rpc。在成功方面,我有一些代码作为此 rpc 调用的触发器。 我的代码中有第二个 rpc。在另一个调用的成功端,我想执行第一个 rpc 成功端中的代码。 在不复制第一个rpc
我有一个奇怪的问题(希望您能提供帮助):我正在开发一个 GWT Web 应用程序,该应用程序有时会同时进行超过 4 - 5 个 GWT RPC 调用 - 就时间而言。 每隔一段时间 - 每 15 个电
我遇到了将大型 RPC 服务拆分成较小块的问题。我在这里找到了基础知识 GWT RPC - Multiple RPC Services Per App ,但我正在努力实现。我在任何地方都找不到任何好的
我目前正在使用具有一项大型 RPC 服务的 GWT 应用程序。它有 100 多个方法,所有方法都做不同的事情。如果将其拆分为多个 RPC 服务,我会获得什么样的性能优势/障碍?我相信我必须为每个人制作
有谁知道可以将 RPC/编码 WSDL 转换为 RPC/文字的工具或“黑盒”?我没有能力更改 API(这不是我的)但我想使用的工具不支持 RPC/Encoded。我想看看是否有人创建了一个简单的黑盒通
我正在调查使用 gorilla web toolkit创建一个简单的 RPC API。我正在使用他们文档中的示例,并且正在使用 Advanced Rest Client 进行测试在 Chrome 中使
由于 JSON-RPC 是面向过程的,因此我在 C# 中有一个 API 不会映射到 JSON-RPC。您将如何在 JSON-RPC 中表示面向对象的 API? 我当然可以使用 JSON-RPC 扩展,
我是来自意大利的计算机科学专业的学生,我必须做一个基于 的项目修改 Daemontools Of D.J. 的版本Bernstein 必须在 Unix 下实现远程过程调用。 通常,为了使用工具启动
我正在将 gwt 与 gwt-platform 结合使用,并使用调度异步进行服务器调用。我遇到的问题是我正在使用的操作没有被标记为可序列化或添加到 *.gwt.rpc 文件中。当我的代码运行时,我得到
我是一名优秀的程序员,十分优秀!