- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在熟悉 GWTP。我试图输出一个包含 JSON 值的表,该表是在 Piriti 映射器的帮助下获取的。这不是一个真正的项目代码,它只是一种理解 GWTP 的尝试,所以这可能不是最漂亮的解决方案(事实上,它不是肯定的)。以下是此过程中涉及的两个演示者:
FirstPresenter
(使用 ProductListPresenter
,这是一个小部件,我不确定这里应该使用小部件,但是,根据 this conversation ,小部件可能会成功):
public class FirstPresenter extends
Presenter<FirstPresenter.MyView, FirstPresenter.MyProxy> {
public static final Object SLOT_RATE = new Object();
public static final Object SLOT_PRODUCT = new Object();
private IndirectProvider<ProductListPresenter> productListFactory;
public interface MyView extends View {
public Panel getListProductPanel();
}
@Inject ProductListPresenter productListPresenter;
@ProxyCodeSplit
@NameToken(NameTokens.first)
public interface MyProxy extends ProxyPlace<FirstPresenter> {
}
@Inject
public FirstPresenter(final EventBus eventBus, final MyView view,
final MyProxy proxy, Provider<ProductListPresenter> productListFactory) {
super(eventBus, view, proxy);
this.productListFactory = new StandardProvider<ProductListPresenter>(productListFactory);
}
@Override
protected void revealInParent() {
}
@Override
protected void onBind() {
super.onBind();
}
@Inject
PlaceManager placeManager;
@Override
protected void onReset() {
super.onReset();
setInSlot(SLOT_PRODUCT, null);
for (int i = 0; i < 2; i++) { //TODO: change hardcoded value
productListFactory.get(new AsyncCallback<ProductListPresenter>() {
@Override
public void onSuccess(ProductListPresenter result) {
addToSlot(SLOT_PRODUCT, result);
}
@Override
public void onFailure(Throwable caught) {
}
});
}
}
}
ProductListPresenter
:
public class ProductListPresenter extends
PresenterWidget<ProductListPresenter.MyView> {
@Inject ProductListPiritiJsonReader reader;
public interface MyView extends View {
public Label getNameLabel();
public Label getCompanyLabel();
public Label getSerialLabel();
public Label getPricesLabel();
}
@Inject
public ProductListPresenter(final EventBus eventBus, final MyView view) {
super(eventBus, view);
}
@Override
protected void onBind() {
super.onBind();
}
@Override
protected void onReset() {
super.onReset();
try {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "/jsongwtproject/products.json");
rb.setCallback(new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
ProductList productList = reader.read(response.getText());
for (Product product : productList.getProductList()) {
fetchDataFromServer();
}
}
@Override
public void onError(Request request, Throwable exception) {
Window.alert("Error occurred" + exception.getMessage());
}
});
rb.send();
}
catch (RequestException e) {
Window.alert("Error occurred" + e.getMessage());
}
}
//Takes the JSON string and uses showProductListData(String jsonString) method
public void fetchDataFromServer() {
try {
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "/jsongwtpproject/products.json");
rb.setCallback(new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
showProductListData(response.getText());
}
@Override
public void onError(Request request, Throwable exception) {
Window.alert("Error occurred" + exception.getMessage());
}
});
rb.send();
}
catch (RequestException e) {
Window.alert("Error occurred" + e.getMessage());
}
}
//Uses Piriti mappers to take JSON values
private void showProductListData(String jsonString) {
ProductList productList = reader.read(jsonString);
for (Product product : productList.getProductList()) {
StringBuffer priceSb = new StringBuffer();
for (Double price : product.getPrices()) {
priceSb.append(price + ", ");
}
getView().getNameLabel().setText(product.getName());
getView().getCompanyLabel().setText(product.getCompany());
getView().getSerialLabel().setText(product.getSerialNumber());
getView().getPricesLabel().setText(priceSb.toString());
//break;
}
}
}
和 ProductListView.ui.xml
:
<g:HTMLPanel>
<table border="1">
<tr>
<td><g:Label ui:field="nameLabel" /> </td>
<td><g:Label ui:field="companyLabel" /> </td>
<td><g:Label ui:field="serialLabel" /> </td>
<td><g:Label ui:field="pricesLabel" /> </td>
</tr>
</table>
</g:HTMLPanel>
目前 JSON 中有两个产品。
下面是这段代码发生的情况:第一行出现 Product1
,然后它变成第一行包含 Product2
的值,然后它再次包含Product1
的值,然后是 Product2
的值,之后出现带有 Product1
的第二行,然后它变为包含Product2
的值,然后它再次包含 Product1
的值,然后再次包含 Product2
的值。
因此,有两个产品和两行,在此代码中,值更改了两次,但最终表中仅包含 Product2
的值。如果 break;
未注释,Product1
的值在第一行中输出两次,然后在第二行中输出,则该表仅包含这些 Product1
的值。
我明白为什么会这样。但我还没有想出如何做出正确的输出。如果有人能告诉我如何进行正确的输出,或者提供一个例子(或者告诉我哪一部分,例如小部件的使用,是非常错误的),那就太好了。
最佳答案
您的代码存在的问题是您的 ProductListView.ui.xml 中确实没有真正的表格。
当然如果从服务器上取回了两条记录,这部分代码会被调用两次:
getView().getNameLabel().setText(product.getName());
getView().getCompanyLabel().setText(product.getCompany());
getView().getSerialLabel().setText(product.getSerialNumber());
getView().getPricesLabel().setText(priceSb.toString());
第二次调用覆盖第一次调用的值。
改进代码的要点:
关于java - 使用 GWTP 创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530152/
我从 https://github.com/ArcBees/GWTP-Samples 下载了样本我通过 Run As > Maven build 运行 gwtp-sample-basic 应用程序,使
我在尝试使用 ant- 构建 gwtp+mgwt 应用程序时遇到很多此类错误 Preparing method tabBarMoreImage [java]
我在 GWT 2.3 中使用 GWTP(Google 的 MVP 框架)。我想与演示者一起使用 GWT 代码拆分。 我知道 Presenter 中的 @ProxyCodeSplit 注解。如下图 @P
我在使用 GWTP 的 Gatekeeper 功能时遇到问题。 遵循示例 gwtp-sample-tab我已经创建了客户端代码。但是现在我仍然想知道如果用户已成功登录,如何通知客户端? (我正在使用
我做了一些来自 GWTP 的例子 http://blog.arcbees.com/2015/10/27/gwtp-beginners-tutorial-toaster-launcher-part-2/
我有: 简单的嵌套演示者(ChannelPresenter),其中有包含记录的表(网格)。我需要在每个 ChannelPresenter.displayEditor() 调用中创建新的 Channel
谁能帮我解决一个问题吗? 我正在从 GWT 2.5.1 升级到 2.6.1,并且在尝试运行项目的代码服务器时收到以下错误... [INFO] Compiling module [INFO] V
我正在尝试创建一个 GWTP 示例应用程序。真的有nice screencast ,但我必须处理一个没有出现在那里的问题(但是,根据评论,更多的新手必须处理错误)。我使用 Eclipse Helios
我有一个 GWTP MyPresenter,它在 onBind() 处注册了一个处理程序,并且它工作得很好。问题是当我使用浏览器上的“后退”箭头离开演示者时。 onUnbind() 永远不会被调用(我
我是 GWT、GWTP 的新手。 我有一个 PresenterWidget,它被多次实例化并被添加到一个插槽中。我想以编程方式定义实例的数量。我只知道我通过注入(inject)创建了一个新的小部件实例
我们正在使用 GWTP (GWT 2.4) 开发一个新应用程序。 有很多关于演示者 View 设计方式的文章 - 每个组件的职责,它们之间的通信 - 但很少关注模型组件。 在我们的应用程序中,我们使用
在过去的几周里,我一直在尝试 GWTP,并用它构建了一个小项目。 这是问题: 我有一个显示数据列表的网格小部件(附加屏幕截图)。选中一行的复选框并单击 Edit Request ,我进入详细页面。 由
我正在熟悉 GWTP。我试图输出一个包含 JSON 值的表,该表是在 Piriti 映射器的帮助下获取的。这不是一个真正的项目代码,它只是一种理解 GWTP 的尝试,所以这可能不是最漂亮的解决方案(事
我有一个 gwtp 演示器,在某些情况下,它必须添加到另一个演示器的 popupslot。 我如何在测试中验证这个事实? 我正在使用 Jukito 进行测试。 演示者代码: ... @Override
我正在使用 GWT 和 GWTP 开发 Web 应用程序。我查看了 wiki page of GWTP并按照说明进行 XSRF 攻击防护。它在 Dev 模式下运行正常。 现在我将它部署到 Tomcat
我正在使用 GWTP,添加一个 Contract 层来抽象 Presenter 和 View 之间的知识,我对 GWTP 的结果非常满意。我正在使用 Mockito 测试我的演示者。 但随着时间的推移
您好,我正在使用 GWTP 进行应用程序开发。在应用程序中,我需要服务器端 session 实例将一些数据放入该 session 实例中。我看到了一些 GWT 示例,其中有扩展 ActionSuppo
我的主演示器中有内容插槽,我如何在应用加载时将主演示器放在一个插槽中,将菜单插槽放在另一个插槽中? 或者不可能? 提前致谢。 最佳答案 是的你可以 !在以下示例代码中,我假设您的 HomePresen
我正在使用 Maven 处理器插件来生成源代码。 org.bsc.maven maven-processor-plu
我正在使用 Mockito 来测试我的 GWTP 项目,但出现了一些错误: com.google.inject.CreationException: Guice creation errors
我是一名优秀的程序员,十分优秀!