java - 在 GWT 中循环生成 Hyperlink/HTML/'Please suggest'?

标签 java gwt

所以我的问题如下:

比如,我在从数据库中获取数据后将其显示在一个 flextable 中,我正在使用循环以常规方式执行此操作。

现在,在整个第一列中,文本应该是可点击的,即我应该能够将点击处理程序添加到第一列值(因为我必须在点击任何第一列文本值时加载另一个表。)

问题:如何在循环中生成这样的超链接标签?当我尝试这样做时,问题就来了,因为我不知道如何在循环运行时给它们命名,也不知道如何在添加 ClickHandler 时使用相同的概念。

我是否应该使用超链接以外的其他东西来完成这项任务。请解释如何?

我非常感谢这方面的帮助,因为我是一个非常新的 GWT 编码员。

-- 千拉汤

最佳答案

使用超链接可能不是执行此类操作的最佳方法,因为您不应该将 ClickHandler 与超链接一起使用。一个Hyperlink设置一个HistoryToken,你应该响应History的变化。
如果您想拥有相同的外观和感觉,我会使用标签并将其设置为普通链接。 (我将在以下示例中使用标签,但如果您愿意,您可以将其更改为超链接。)

我会创建一个扩展 Label 的类。此类将具有您在构造函数中设置的 ID。您可以将此 Id 发送到服务器以获取新的 FlexTable。在构造函数中,您添加一个 ClickHandler,它读取 id 字段并将其发送到服务器以获取新的 FlexTable。

public class FlexTableLabel extends Label implements ClickHandler {
    int id=0;  
    public FlexTableLabel(String text, int id) {
        this.id=id;
        this.setText=text;
        this.addCickHandler(this);
    }

    public void onClick(ClickEvent event) {
        //sends the id to the server, of course you need to replace it with your 
        //service
        yourService.getNewFlexTable(this.id);
    }     
 }

在您的循环中,您只需创建新类的对象并为其提供适当的参数(我假设您有一个带有结果的 ArrayList。此 ArrayList 中的对象将具有文本和 ID):

for(int i=0; i<result.size;i++) {
    FlexTable.setWidget(i,0, new FlexTableLabel(result.get(i).text, result.get(i).id);
}

我希望这至少能让您有所作为,如果仍有不清楚的地方,请发表评论,我会尽力帮助您弄清楚。

编辑基于Chirayu's post :

在不了解您的应用程序的情况下很难解释这样的事情。 我通常执行 Singleton Pattern获取特定的小部件。 所以我会创建一个这样的类:

public static YourPanel extends Panel {
    private static YourPanel instance=null;

    public static YourPanel getInstance() {
        if(instance==null) {
            instance=new YourPanel();
        }
        return instance;
    }
}

在您的 EntryPointClass 中,您将拥有如下内容:

public class YourEntryClass extends EntryPoint {
    public void onModuleLoad() {
        RootPanel.get().add(YourPanel.getInstance());
    }
}

您现在可以在服务的 onSuccess() 部分调用 YourPanel.getInstance() 方法来更改面板的内容:

yourService.getNewFlexTable(this.id, new AsyncCallback<ArrayList<String>>() {
    public void onSuccess(ArrayList<String> result) {
    For(int i=0;i<result.size;i++) {
            YourPanel.getInstance().add(result.get(i);
        } 
    }
});

希望对您有所帮助。如果没有,请发表评论。

示例应用
Sample app running
Sample app source code

关于java - 在 GWT 中循环生成 Hyperlink/HTML/'Please suggest'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354533/

相关文章:

java - 如何在 Infix 到 Postfix 后将整数分组在一起

java - 每个 uiBinder 有几个 css

java - Eclipse GWT 控制台警告

java - 在没有 Jetty 的情况下运行 GWT Speedtracer

java - 数组初始化给出空指针异常

java - 清除屏幕上的所有图形 Java

java - NotificationCompat.BigPictureStyle 可以获取图片显示

java - Cloud Firestore java.lang.IllegalArgumentException : Invalid data. 不支持的类型:

java - GWT,修改使用InputStreamReader和java.net.URL类通过Post发送HashMap或其他对象的代码?

java - 使用maven将jar加载到项目中