我是GWT的新手,也是使用Spring MVC进行Java Web开发的新手,并且我想知道是否有人可以帮助我澄清这一点,因为我一直在进行广泛搜索,但仍不清楚。在以前进行PHP / Javascript开发时,我经常会使用PHP在页面加载时动态填充javascript中的某些内容(例如javascript变量)。在我看来,这通常不是用GWT完成的,而是只是将GWT应用程序直接部署到用户的浏览器中,然后GWT客户端应用程序进行RPC调用以检索任何必要的数据。页面加载时是否不会将动态数据放入GWT页面?
我希望在此进行任何澄清,因为我已经花了很多时间在寻找并且我不想继续尝试做某事(页面加载时GWT代码中的动态数据),如果这不可能或通常不好的话理念。谢谢
最佳答案
GWT应用程序仅输出HTML,因此您可以在GWT应用程序运行之前或运行时对页面执行任何操作。
例如,您的GWT应用程序声明了一些本地JS代码,如下所示:
private native doSomething() /*-{
doSomethingJS();
}-*/;
GWT应用程序在运行时调用doSomething()的地方,它依次调用一个名为doSomethingJS()的JS函数,该函数可以执行任何操作(操纵DOM,弹出对话框,验证字段等)。
您用于GWT应用程序的HTML文件可以定义此功能或从外部拉入。如果愿意,您甚至可以使用PHP或JSP即时生成HTML文件。
例如,我可以使用JSP文件生成应用的着陆页,定义doSomethingJS(),嵌入一些表达式或CSS hack或其他方法,例如
<%@ include file="taglibs.jsp" %>
<%@ include file="nocache.jsp" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>My Application</title>
<script type="text/javascript">
function doSomethingJS() {
window.alert("Hello ${some.element.name}!");
}
</script>
<script type="text/javascript"
src="com.MyApplication.nocache.js"></script>
</head>
<!--[if lt IE 7 ]> <body class="ie6" id="ie6hack"> <![endif]-->
</div>
</body>
</html>
以上还意味着您可以根据需要避免往返。例如,假设我的GWT应用程序需要知道用户的电子邮件地址,但我们不想在启动时询问服务器。
我们可以定义一个本地方法:
private native String getEmailAddress() /*- { return emailAddress; } -*/;
而且我们的JSP可能包含诸如
<script>
var emailAddress = "${user.emailAddr}";
</script>
因此,我们节省了往返行程,因为数据已直接嵌入HTML并可供应用程序使用。
关于java - 有关Google Web Toolkit(GWT)和HTML页面中动态数据的预处理的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4942421/