Java 生成超链接/HTML/';请建议';在GWT的循环中?

Java 生成超链接/HTML/';请建议';在GWT的循环中?,java,gwt,Java,Gwt,因此,我的问题如下: 比如说,我从数据库中获取数据后,在flextable中显示数据,我使用循环以常规方式执行此操作 现在,在整个第一列中,文本应该是可单击的,即我应该能够向第一列值添加一个单击处理程序(因为我必须在单击任何第一列文本VAL时加载另一个表) 问题:在循环中如何生成这样的超链接标记?当我尝试这样做时,问题来了,因为我不知道如何将它们命名为循环运行,并且在添加ClickHandler时使用相同的概念 我是否应该使用超链接以外的其他内容来完成此任务。请解释一下怎么做 我真的很感谢在这方

因此,我的问题如下:

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

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

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

我是否应该使用超链接以外的其他内容来完成此任务。请解释一下怎么做

我真的很感谢在这方面的帮助,因为我是一个非常新的GWT编码器


--Chirayu

使用超链接可能不是这样做的最佳方式,因为您不应该将ClickHandler与超链接一起使用。超链接设置HistoryToken,您应响应历史记录的更改。
我会使用一个标签,如果你想有相同的外观和感觉,也许样式它作为一个正常的链接。 (我将在下面的示例中使用标签,但如果愿意,可以将其更改为超链接。)

我将创建一个扩展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):

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

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

    public static YourPanel getInstance() {
        if(instance==null) {
            instance=new YourPanel();
        }
        return instance;
    }
}
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);
        } 
    }
});
yourService.getNewFlexTable(this.id,newAsyncCallback

我建议更具体地说,通过构造函数使用:

为脚本创建一个锚点 锚点的href设置为javascript:;, 基于以下期望: 监听器将被添加到锚中

因此,您将得到一个很好的ol'
,单击它什么也不做,但您可以向它添加一个
ClickHandler
,如下所示:

Anchor anchor = new Anchor("Click me!"); // At this point clicking it won't do a thing
anchor.addClickHandler(new ClickHandler() {
    @Override
    public void onClick (ClickEvent event){
        // Do something cool here
    }
});

// Insert the anchor into the table

还有一个提示:最好创建一次
ClickHandler
,然后将其添加到每个
Anchor
,而不是为添加到表中的每个
Anchor
创建一个新的匿名类(如上面的示例所示)-根据行数,它确实可以加快速度。

不是答案…更多的是从上面给Chris和Igor打电话,因为无法在评论中包含这么多内容。

嘿@Chris,有一个问题,如果你再来读一遍(希望)…我对一件事感到困惑,所以我按照你上面解释的那样做了,但是现在如果我的面板是在我的
入口点
类中定义的,它有你上面给出的“for循环”

然后在另一个类
FlexTablelabel
中,在我添加服务的部分,即
onClick
部分…我应该如何向
入口点
类中定义的面板添加内容

在,


如何从
EntryPoint
类访问面板、方法等。我知道我可以做
EntrypointClass EC=new EntrypointClass()
,但它并没有发挥应有的作用。

@Chris,非常感谢。我一直在寻找类似于您所解释的东西,我还没有尝试……我没有提高您声誉的声誉,但我非常感谢。:D另外,如果我卡住了,我会在这里发布更多详细信息。请明天查看。@Chris Boesing,它成功了……谢谢ton!:D(希望看到你问我更多的窃听问题)很高兴它起作用了。我每天至少检查一次gwt标签,所以我会尽我所能回答我所知道的全球状态是baaaad;)@Chris,我认为这是解决方案…有点复杂,但那是因为我在这方面是新手…尽管如此,这当然是一种解决方案…我真的很感谢..我会在这里再次发布,作为对最终成功的评论。我知道你会回复..你是周围资深成员中的佼佼者(Hilbrand也在那里)!:我会接受你的建议并继续,如果我需要帮助,我会在这里发布。请明天再查。非常感谢。没问题,很高兴我能帮忙:)依赖注入(DI)是我的建议。GoogleGin)是一个非常好的GWT DI框架,它使用Guice()作为基础。当您进行此操作时,您可能希望查看MVP(Model View Presenter),然后搜索它。相信我,它使GWT应用程序更易于维护和测试。@Igor,是的,我正在学习GWT ppt的最佳实践……我觉得这就是解决方案……但我正在努力解决一些问题,例如:当在列中单击值时,如何捕获单击哪个链接的事实,因为我需要传递和使用一些VAL,这些VAL基于该列中的链接可能被单击。非常感谢您的进一步帮助。由于您在
FlexTableLabel
类中,您可以在
onClick
方法中引用其中的所有字段,包括其文本等。因此我看不到任何问题(除非我遗漏了某些内容)。哦,整个问题变得(更准确地说,已经变得)一团糟-如果你需要在一个新主题(比如DI)上的进一步帮助,请创建一个新的(有效的;))问题。这样对其他用户也会有帮助。@Igor,我本不想把它弄得一团糟,但我想我在提出这个问题时不够清晰,导致了它现在的状态……无论如何,对不起……我被卡住了,我会想办法弄明白一些事情(尽管我怀疑我是否能够做到)。谢谢你的帮助。我不想阻止你在这里发布更多的问题
Anchor anchor = new Anchor("Click me!"); // At this point clicking it won't do a thing
anchor.addClickHandler(new ClickHandler() {
    @Override
    public void onClick (ClickEvent event){
        // Do something cool here
    }
});

// Insert the anchor into the table
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);
    }     
}