在服务器端,有一个JNDI资源,我需要从客户端GWT应用程序中读取
我知道,我可以进行GWT RPC调用以动态获取JNDI资源,但JNDI资源是一个静态URL,一旦页面加载就不会改变。所以 - 我的想法是在加载页面时加载JNDI资源。
我发现了一个关于如何做到这一点的过时描述 - 在2011年
https://webtide.com/gwt-and-jndi/
但是,我想知道,对于更新版本的GWT(我使用的是GWT 2.7.0),这是否可行
答案 0 :(得分:1)
我遇到了同样的问题。将JNDI参数和一些其他配置值传递给GWT应用程序。
诀窍是动态生成GWT主页(在我的例子中使用JSP)。
对我的GWT应用程序的每次初始调用都会转到前端控制器(Servlet),以用于授权目的和其他一些初始化的东西。
然后我获取所有JNDI参数和其他值,将它们放入请求上下文并调用主页JSP。
在我的JSP页面中,我定义了一个JavaScript哈希并用参数初始化它。
<script type="text/javascript">
var my_params = {
jndiParam1: '<%= request.getAttribute("jndiParam1") %>',
exampleUrl: '<%= request.getAttribute("exampleUrl") %>',
jndiParam2: '<%= request.getAttribute("jndiParam2") %>'
};
</script>
在我的GWT应用程序中,我有一个类HostPageParameter
,它使用com.google.gwt.i18n.client.Dictionary
来访问JavaScript哈希my_params
。
public class HostPageParameter {
private static final String DICTNAME = "my_params";
private static HostPageParameter instance = null;
public static HostPageParameter getInstance() {
if(instance == null) {
instance = new HostPageParameter();
}
return instance;
}
private Dictionary myParams;
private HostPageParameter() {
try {
myParams = Dictionary.getDictionary(DICTNAME);
} catch(MissingResourceException e) {
// If not defined
myParams = null;
}
}
public String getParameter(String paramName) {
return getParameter(paramName, null);
}
public String getParameter(String paramName, String defaultValue) {
String paramValue = null;
if(myParams != null && paramName != null) {
try {
paramValue = myParams.get(paramName);
} catch (MissingResourceException e) {
// If not defined
paramValue = defaultValue;
}
}
return paramValue;
}
}
要阅读您可以使用的值:
// Without a default value, If not defined, null is returned.
final String jndiParam1 = HostPageParameter.getInstance().getParameter("jndiParam1");
// With default value.
final String exampleUrl = HostPageParameter.getInstance().getParameter("exampleUrl",
"http://example.com");