试图避免在这里重新发明轮子.我有一个Google Web Toolkit页面,我准备部署,但我正在与之通信的Web服务在部署的服务器上的相对地址与本地测试机器不同.
因此,我正在寻找一种简单的方法来部署一些易于编辑的配置文件,我可以在服务器端放置基本设置.关于如何做到这一点,我有几个想法,但它们看起来有点hacky,在我看来,必须已经有这种问题的解决方案(毕竟,每服务器设置是非常常见的事情!)
有任何想法吗?
编辑:由于这似乎没有引起太多关注,让我概述我的初步想法:在我任何其他逻辑之前,使用AJAX调用查询我查询的GWT文件的本地静态文件.当文件返回时,我解析出我的数据并将它们存储为全局可访问的变量,然后允许页面构建逻辑运行.看起来很笨,并且在任何加载之前等待AJAX返回有很大的缺点,但它会起作用.有更好的建议吗?(请?)
我的解决方案: 我自己找到了一个解决方案,但它与我的具体情况非常相关,因此我不知道它对普通用户有多大用处.无论如何,我会在这里发布它,因为有人发现它很有用.
我正在处理的页面实际上是嵌入在ASP.net站点中的GWT控件.利用这一点,以及我对GWT Dictionary类的发现,我把这样的"设置"系统放在一起:
首先,在ASP.net Web.Config文件中设置我想要的设置(在这种情况下是web服务的地址)
<appSettings>
<add key="serviceUrl" value="http://mySite.com/myService.asmx"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
在嵌入GWT控件的ASP页面中,我添加了一个"静态"javascript对象,其中包含我需要的配置设置:
<head runat="server">
<title>Picklist Manager</title>
<script type="text/javascript" language="javascript">
var AppConfig = {
serviceUrl: "<%= ConfigurationManager.AppSettings["serviceUrl"] %>"
};
</script>
<script type="text/javascript" language="javascript" src="gwtcontrol.nocache.js"></script> <!-- Include my GWT control -->
</head>
Run Code Online (Sandbox Code Playgroud)
最后,在GWT中我创建了一个静态的"AppConfig"类,它暴露了这个设置:
public class AppConfig {
public static String serviceUrl = "defaultUrl";
public static void Initialize() {
Dictionary appConfig = Dictionary.getDictionary("AppConfig");
if(appConfig == null) { return; }
servicePath = appConfig.get("serviceUrl");
}
}
Run Code Online (Sandbox Code Playgroud)
从那里我可以在我的代码中的任何地方调用AppConfig.serviceUrl来获取设置...... 哇!所以,是的,这是一个很好的长期复杂的方式,但它适用于我.鉴于亚历山大的答案似乎最符合我的要求,所以赏金归于他,但感谢所有投入我的粘性小问题的人!
随意纠正我,但似乎你不需要运行时服务器端配置.如果你真的需要这种灵活性,或者你想在所有部署中使用单个.zip,你可以使用雅虎性能规则中给出的技术- (参见"添加过期或缓存控制标题"一节) - 远期未来过期标题.这意味着浏览器会大量缓存AJAX请求,并且只会导致第一个请求的轻微减速.
我实际上建议使用编译时标志和GWT提供的属性系统,而不是这样做.为了简化这一点,我在github上创建了一个名为auto-config的小包.使用它可以非常简单地访问每个部署配置.添加以下类:
public interface MyConfiguration extends AutoConfiguration {
public String getFoobar();
}
Run Code Online (Sandbox Code Playgroud)
要从GWT代码访问值,请添加以下简单帮助:
private MyConfiguration getMyConfiguration() {
return (MyConfiguration) GWT.create(MyConfiguration.class);
}
Run Code Online (Sandbox Code Playgroud)
创建几个不同的.gwt.xml文件,每个部署服务器一个.然后使用父.gwt.xml文件最小化任何重复.有关此主题的更多信息,请阅读GWT Wiki上的CompileOnePermutation
总之,将以下代码段添加到每个部署.gwt.xml中(并确保添加所需的继承行):
<set-configuration-property name="foobar" value="whee1234" />
Run Code Online (Sandbox Code Playgroud)
希望有帮助:)
| 归档时间: |
|
| 查看次数: |
7776 次 |
| 最近记录: |