替换URL以从GWT中的下拉列表中获取区域设置在Safari5 for Mac上的行为异常

替换URL以从GWT中的下拉列表中获取区域设置在Safari5 for Mac上的行为异常,gwt,gwt2,Gwt,Gwt2,我已经在Mac OS X 10.5.8上的Tomcat 6.0.29上部署了一个简单的国际化2.0.4 GWT应用程序,使用Eclipse相当于HelloGWT示例,它有一个下拉列表来获取区域设置并根据选择替换url 无论是在Firefox还是Safari中,它在开发模式下都可以正常工作 在Safari中,当部署到Tomcat时,应用程序具有所有功能,但只要鼠标指针离开url字段,url字段中的旋转轮就会持续运行 另一方面,在Firefox 3.6.10中,没有这样的行为,但它会直接打开显示用户

我已经在Mac OS X 10.5.8上的Tomcat 6.0.29上部署了一个简单的国际化2.0.4 GWT应用程序,使用Eclipse相当于HelloGWT示例,它有一个下拉列表来获取区域设置并根据选择替换url

无论是在Firefox还是Safari中,它在开发模式下都可以正常工作

在Safari中,当部署到Tomcat时,应用程序具有所有功能,但只要鼠标指针离开url字段,url字段中的旋转轮就会持续运行

另一方面,在Firefox 3.6.10中,没有这样的行为,但它会直接打开显示用户代理等的问候对话框,就像点击按钮一样

在这两种情况下,我看不出问题出在哪里

以下是我用来更改url的代码:

languageBox.addChangeHandler(new ChangeHandler() {
    @Override
    public void onChange(ChangeEvent event) {
        String languageName = languageBox.getValue(languageBox.getSelectedIndex());
        UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", languageName);
        Window.Location.replace(builder.buildString());
    }
});
这里有什么我做错的吗

提前谢谢你的提示

补充资料

我使用simplePanel包装列表框,这样我就可以将它和应用程序的标题放在一起。我想知道这是否是Safari上的一个问题:

RootPanel.get("applicationName").add(new Label(constants.helloGWT()));
...
// Here comes the definition of languageBox
...
final SimplePanel languagePanel = new SimplePanel();
    languagePanel.add(languageBox);
    languagePanel.addStyleName("languagePanel");
    RootPanel.get("languagePanelContainer").add(languagePanel);
然后在html页面中,我有:

<div align="center">
    <h1 id="applicationName"></h1>
    <div id="languagePanelContainer"></div>
</div>
知道我在哪里出错了吗


提前感谢您的回答。

这个简单的例子对我来说很好:

    public void onModuleLoad() {
        final ListBox languageBox = new ListBox(false);
        languageBox.addItem("en");
        languageBox.addItem("de");
        languageBox.addItem("fr");

        languageBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent event) {
                String languageName = languageBox.getValue(languageBox.getSelectedIndex());
                UrlBuilder url = Window.Location.createUrlBuilder().setParameter("locale", languageName);
                Window.Location.replace(url.buildString());
            }
        });

        RootPanel.get().add(languageBox);
    }

这对你有用吗?

这个简单的例子对我很有用:

    public void onModuleLoad() {
        final ListBox languageBox = new ListBox(false);
        languageBox.addItem("en");
        languageBox.addItem("de");
        languageBox.addItem("fr");

        languageBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent event) {
                String languageName = languageBox.getValue(languageBox.getSelectedIndex());
                UrlBuilder url = Window.Location.createUrlBuilder().setParameter("locale", languageName);
                Window.Location.replace(url.buildString());
            }
        });

        RootPanel.get().add(languageBox);
    }

这对您有用吗?

要更改的事实是:将位置更改为窗口。处理程序中的位置解决了Firefox的问题。这样,用户名字段将获得焦点作为例外。但是Safari仍然存在一个问题,即url字段中的轮子旋转。您的代码在开发模式下工作正常吗?这一切对我来说都很好。事实上,我不得不在两行中切换窗口。位置到位置,否则Safari什么也看不到。显然,要解决Safari中的问题,首先应该测试select是否已更改,但如果不触发处理程序,这是不可能的。这样,用户名字段将获得焦点作为例外。但是Safari仍然存在一个问题,即url字段中的轮子旋转。您的代码在开发模式下工作正常吗?这一切对我来说都很好。事实上,我不得不在两行中切换窗口。位置到位置,否则Safari什么也看不到。显然,要解决Safari中的问题,首先应该测试select是否已更改,但如果不触发处理程序,这是不可能的。