速度テンプレートにJavaScriptを追加してみます。
<html>
<head>
<title>:: $currency.CurrencyName Detail Info ::</title>
</head>
<body>
<table>
<tr>
<td>Name</td>
<td>$currency.CurrencyName</td>
</tr>
<tr>
<td>Jual</td>
<td><div id="$currency.CurrencyName_buy">$currency.Buy</div></td>
</tr>
<tr>
<td>Beli</td>
<td><div id="$currency.CurrencyName_sell">$currency.Sell</div></td>
</tr>
</table>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
setInterval(function() {
$.get('updateCurrency.htm', function(data) {
$('#time').text(data);
});
}, 5 * 60 * 1000); // 1000 milliseconds = 1 second.
});
</script>
<p>Current date/time is: <span id="time"></span>
</body>
</html>
しかし、私は次のエラーを受け取りました:
org.Apache.velocity.exception.ParseErrorException: Encountered "," at line 28, column 29 of currencyDetail.html
Was expecting one of:
<EOF>
"(" ...
<RPAREN> ...
<ESCAPE_DIRECTIVE> ...
<SET_DIRECTIVE> ...
"##" ...
"\\\\" ...
"\\" ...
<TEXT> ...
"*#" ...
"*#" ...
<STRING_LITERAL> ...
<IF_DIRECTIVE> ...
<STOP_DIRECTIVE> ...
<INTEGER_LITERAL> ...
<FLOATING_POINT_LITERAL> ...
<Word> ...
<BRACKETED_Word> ...
<IDENTIFIER> ...
<DOT> ...
"{" ...
"}" ...
at org.Apache.velocity.Template.process(Template.Java:137)
at org.Apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.Java:415)
at org.Apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.Java:335)
at org.Apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.Java:1102)
at org.Apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.Java:1077)
at org.Apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.Java:528)
at org.springframework.web.servlet.view.velocity.VelocityView.getTemplate(VelocityView.Java:535)
at org.springframework.web.servlet.view.velocity.VelocityView.getTemplate(VelocityView.Java:520)
at org.springframework.web.servlet.view.velocity.VelocityView.checkTemplate(VelocityView.Java:293)
at org.springframework.web.servlet.view.velocity.VelocityView.initApplicationContext(VelocityView.Java:258)
at org.springframework.context.support.ApplicationObjectSupport.setApplicationContext(ApplicationObjectSupport.Java:73)
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.Java:70)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.Java:323)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:1355)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.Java:314)
at org.springframework.web.servlet.view.UrlBasedViewResolver.loadView(UrlBasedViewResolver.Java:413)
at org.springframework.web.servlet.view.AbstractCachingViewResolver.createView(AbstractCachingViewResolver.Java:159)
at org.springframework.web.servlet.view.UrlBasedViewResolver.createView(UrlBasedViewResolver.Java:378)
at org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName(AbstractCachingViewResolver.Java:78)
at org.springframework.web.servlet.DispatcherServlet.resolveViewName(DispatcherServlet.Java:1190)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.Java:1139)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:900)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:808)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:476)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.Java:431)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.Java:717)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:290)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.Java:119)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.Java:55)
at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:235)
at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:206)
at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:233)
at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:191)
at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:127)
at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:102)
at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:109)
at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:298)
at org.Apache.coyote.http11.Http11Processor.process(Http11Processor.Java:857)
at org.Apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.Java:588)
at org.Apache.Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.Java:489)
at Java.lang.Thread.run(Unknown Source)
JavaScriptスクリプトを削除すると、Webページは正常にロードされました。誰でも理由を説明できますか?速度テンプレートを使用している場合、JavaScriptは機能しないと思います。
Velocity 1.7b1の新しい構文#[[this is included in output but not parsed]]#
が導入されました:
#[[
$(document).ready(function() {
...
});
]]#
JqueryとVelocityを混合するとき、最も簡単なことは、$の代わりに "jQuery"を使用することです。
jQuery("#divid")
これにより、問題を回避できます。速度のエスケープはトリッキーで直感的ではありません。
別の方法は、javscriptを独自のファイルに追加し、#include vtlスクリプトディレクティブを使用することです。
例えば。:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
#include( "currencyDetail.js")
</script>
currencyDetail.jsの内容(.vmファイルと同じdir/classpathパッケージにあります):
$(document).ready(function() {
setInterval(function() {
$.get('updateCurrency.htm', function(data) {
$('#time').text(data);
});
}, 5 * 60 * 1000); // 1000 milliseconds = 1 second.
});
これは私にとって最も簡単でした。
Velocity 1.7以降をお持ちでない場合、またはJavaScriptまたはjqueryの一部としてVelocityコードを使用する必要がある場合、問題の原因となっているjavascript/jqueryのキーワードを特定し、変数に入れることができます。その後、Velocityは出力を正しくレンダリングします。
最初に変数を設定します。
#set ( $replaceme = "each" )
次に、コードでそれを使用します。
function reverseCommentOrder(){
$comments = AJS.$('#page-comments');
$comments.children().$replaceme(function(i,li){$comments.prepend(li)});
}
これにより、ページでJavaScriptが機能します。
現在、Apache Velocityテンプレートを使用しています。JavaScriptをVelocityテンプレートに含める方法を教えてください。スタックオーバーフローフォーラムから提供されたすべての提案を試してみました。