nvelocity中的#if()如何在JavaScript中使用?

nvelocity中的if跟JavaScript中的if关键字冲突了,怎么想办法可以用nvelocity中的#if

 <script type="text/javascript">
     function GetTestType() {
         var s = document.getElementById("testType");
         $selectedType =s.options[s.selectedIndex].text;
         alert($selectedType);
         var n = document.getElementById("testName");

        #foreach($row in $Data.testData)
             #if($row.TestType==$selectedType)
                n.options.add(new Option("text", "value"));
               #end
         #end
     }
</script>

这个是按照你的改的:

 </head>
<script src="../javascript/jquery-1.7.2.js" type="text/javascript"></script>
 <script type="text/javascript">

     var testData = $Data.testData;
     function GetTestType() {

         var s = document.getElementById("testType");
         var n = document.getElementById("testName");
         var selectedType = s.options[s.selectedIndex].text;

         var i;
         for (i = n.length-1; i >=0; --i) {
             n.remove(i);  
         }
         alert(testData.length); //这个没反应。。。说明testData没有被赋值。
         for (i = 0; i < testData.length; ++i) {
             var row = testData[i];

             if (row.TestType == selectedType) {
                 n.options.add(new Option(row.TestName, row.Id));
             }
         }
  }
</script>

<script type="text/javascript">
    function GetSelectedId() {
        var s = document.getElementById("testName");
        $selectedId = s.options[s.selectedIndex].id
        alert($selectedId);

    }
</script>
<body>

图片说明

4个回答

既然你是用了js,我认为你的testName这个下拉框的数据$Data.testData是一次性都传给客户端的,如果是这样的话,foreach, if等,都是纯js代码,不需要使用nvelocity的语句,需要的是把$Data.testData赋值给一个js变量,比如var testData = $Data.testData;
我写了一个简单的演示代码,你可以点击查看

 //var testData = $Data.testData;
var testData = [
    {TestType: 'Type 1', Text: 'Text 1', Value: 'Value 1'},
    {TestType: 'Type 2', Text: 'Text 2', Value: 'Value 2'},
    {TestType: 'Type 3', Text: 'Text 3', Value: 'Value 3'},
    {TestType: 'Type 1', Text: 'Text 4', Value: 'Value 4'},
    {TestType: 'Type 2', Text: 'Text 5', Value: 'Value 5'},
    {TestType: 'Type 3', Text: 'Text 6', Value: 'Value 6'},
    {TestType: 'Type 1', Text: 'Text 7', Value: 'Value 7'},
    {TestType: 'Type 2', Text: 'Text 8', Value: 'Value 8'}
];
function GetTestType(){
    var s = document.getElementById("testType");
    var selectedType = s.options[s.selectedIndex].text;
    //alert(selectedType);
    var n = document.getElementById("testName");

    var i;
    for (i = n.length - 1; i >= 0; --i) {
        n.remove(i);
    }
    //forEach(row in testData){
    for(i = 0, l = testData.length; i < l; ++i){
        var row = testData[i];
        if(row.TestType == selectedType){
            n.options.add(new Option(row.Text, row.Value));
        }
    }
}
save4me
save4me 不客气,你能转成json比在模板里面遍历应该更好。已经加了。
4 年多之前 回复
u012648848
phd12tho 回复save4me: 大神。。。。我参考你的那个json格式变量var testData=[.....]; 我在一般处理程序那里将数据tb.rows转换成json格式的字符串,然后传过去。再让var testData=$Data.testData(这个是一个json字符串);这样他就能识别了。。。后面的太代码就能运行了。。。。感谢大神啊。。。问一下大神工作没?是从事软件.net编程方向的么?交个朋友呗我的qq:502603713
4 年多之前 回复
u012648848
phd12tho 回复save4me: 我是通过一般处理程序,将nvelocity渲染过的模板,展现出来的。。。。这是其中一段代码 var data = new { testData = tb.Rows }; string html = MyClass.NVelocity.RenderHtml("StudentExam.htm", data); context.Response.Write(html);
4 年多之前 回复
u012648848
phd12tho 回复save4me: 是的。。。是客户端的。。。现在不知道有什么办法解决了。。。
4 年多之前 回复
save4me
save4me 贴的这个是客户端的代码吗,还是你服务器模板的代码?如果是客户端的代码,那么你说的对,$Data.testData没有被赋值,模板在服务器解析之后,变量$Data.testData应该被实际数据替代的
4 年多之前 回复
u012648848
phd12tho 回复save4me: 大神。。。内容在题目中更新了。。。。
4 年多之前 回复
save4me
save4me 你把客户端网页源代码的var testData = 后面的内容贴出来看看
4 年多之前 回复
u012648848
phd12tho 回复save4me: 他是在 var testData = $Data.testData;这里报错了。。。。
4 年多之前 回复
save4me
save4me 你上面的代码里面没有System啊,你看看错误在哪行,然后再看看是否定义了。可能前面js的代码错误会导致后面的代码不能执行。
4 年多之前 回复
u012648848
phd12tho console报了这样的错;Uncaught ReferenceError: System is not defined .....Uncaught TypeError: Cannot read property 'length' of undefined
4 年多之前 回复
save4me
save4me 你在浏览器查看到源代码里面的testData了吗?贴出来看看
4 年多之前 回复
u012648848
phd12tho 回复save4me: 那个我已将n.options.add(new Option(row.Id, row.TestName))改过了。。。是不行的
4 年多之前 回复
save4me
save4me 还可以在浏览器按F12,在控制台标签页看看有没有什么错误信息。
4 年多之前 回复
save4me
save4me 第一步,你在浏览器右键查看源代码,看看页面里面var testData有没有你赋的值,第二,我之前不知道是TestName,TestType和Id这三个字段,所以使用的是TestType, Text和Value这三个字段,你需要把n.options.add(new Option(row.Text, row.Value));改成n.options.add(new Option(row.Id, row.TestName));你改过了吗?
4 年多之前 回复
u012648848
phd12tho 或者说直接var testData=$Data.testData这样,付不了值。
4 年多之前 回复
u012648848
phd12tho 我可以肯定的是大小写肯定是没错的。。。我的$Data.testData是一个table.rows集合,有三个字段分别为TestName,TestType,Id。我觉得如果直接var testData=$Data.testData这样,testData不知道我有TestName,TestType和Id。。。。
4 年多之前 回复
save4me
save4me 你的$Data.testData是怎么样的?注意一下大小写之类的,根据你的实际数据,修改一下,如果还有问题,你可以贴出来,我在演示代码里面测试一下。
4 年多之前 回复
u012648848
phd12tho 额。。。大神。我试过了。。。不过用var testData = $Data.testData(我的数据是从后台传过来的);不行。。。好像testData不能识别我的TestType(就是点不出来)
4 年多之前 回复

首先,NVolecity是大小写敏感的,你在程序里面用的是小写的data,但是在模板里面用的是首字母大写的Data,这导致了模板找不到变量。
因为data.TestData是一个Data Row的集合,所以不能直接转换成模板里的数组,需要遍历一下,下面是更新的模板代码

<script src="../javascript/jquery-1.7.2.js" type="text/javascript"></script>
<script type="text/javascript">
    var testData = [];
    #foreach($item in $data.testData)
    testData.push({TestType: "$item.TestType", Id: "$item.Id", TestName: "$item.TestName"});
    #end
    function GetTestType() {
        var s = document.getElementById("testType");
        var n = document.getElementById("testName");
        var selectedType = s.options[s.selectedIndex].text;

        var i;
        for (i = n.length-1; i >=0; --i) {
            n.remove(i);  
        }
        alert(testData.length); //这个没反应。。。说明testData没有被赋值。
        for (i = 0; i < testData.length; ++i) {
            var row = testData[i];

            if (row.TestType == selectedType) {
                n.options.add(new Option(row.TestName, row.Id));
            }
        }
    }
</script>

<script type="text/javascript">
    function GetSelectedId() {
        var s = document.getElementById("testName");
        $selectedId = s.options[s.selectedIndex].id
        alert($selectedId);
    }
</script>

下面是根据你的描述我写的解析模板的测试程序

using System;
using Commons.Collections;
using System.IO;
using System.Data;
using NVelocity;
using NVelocity.App;
using NVelocity.Runtime;

namespace NVelocityDemo
{
    class Program
    {
        public static void Main(string[] args)
        {
            Render();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }

        public static DataTable CreateData()
        {
            DataTable userTable = new DataTable();
            userTable.Columns.Add("TestType", typeof(string));
            userTable.Columns.Add("Id", typeof(int));
            userTable.Columns.Add("TestName", typeof(string));
            userTable.Rows.Add("Type 1", 1, "Name 1");
            userTable.Rows.Add("Type 2", 2, "Name 2");
            userTable.Rows.Add("Type 3", 3, "Name 3");
            userTable.Rows.Add("Type 1", 4, "Name 4");
            userTable.Rows.Add("Type 2", 5, "Name 5");
            userTable.Rows.Add("Type 3", 6, "Name 6");
            userTable.Rows.Add("Type 1", 7, "Name 7");
            userTable.Rows.Add("Type 2", 8, "Name 8");
            userTable.Rows.Add("Type 3", 9, "Name 9");
            return userTable;
        }

        public static void Render()
        {
            var data = new {testData = CreateData().Rows};

            VelocityEngine ve = new VelocityEngine();//模板引擎实例化
            ExtendedProperties ep = new ExtendedProperties();//模板引擎参数实例化
            ep.AddProperty(RuntimeConstants.RESOURCE_LOADER, "file");//指定资源的加载类型
            ep.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, AppDomain.CurrentDomain.BaseDirectory);//指定资源的加载路径
            ep.AddProperty(RuntimeConstants.INPUT_ENCODING, "utf-8");//输入格式
            ep.AddProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8");//输出格式
            //模板的缓存设置
            //ep.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);              //是否缓存
            //ep.AddProperty("file.resource.loader.modificationCheckInterval", (Int64)300);    //缓存时间(秒)
            ve.Init(ep);

            Template t = ve.GetTemplate("StudentExam.htm");//加载模板
            VelocityContext vc = new VelocityContext(); //当前的数据信息载体集合
            vc.Put("data", data);//输入data标签的数据,模板标签为$data       

            StringWriter sw = new StringWriter();
            t.Merge(vc, sw);

            Console.Write(sw.ToString());
            //System.Diagnostics.Debug.Print(sw.ToString());

            Console.ReadLine();
        }
    }
}

根据上面的代码从模板解析后的页面代码,我更新了演示代码,你可以点击查看

nvelocity模板解析的时候,#if是作为一个整体的,应该不会有问题。你是提示出错还是没有解析出来?

u012648848
phd12tho <p align="center"> 选择测试试题:<select onchange="GetSelectedId()" id="testName" name="testName"> <option id="default2"><--请选择试题--></option> </select> </p>
4 年多之前 回复
u012648848
phd12tho <p align="center"> 选择测试模块:<select onchange="GetTestType()" id="testType" name="testType"><option id="default1" selected="selected"><--请选择试题科目--></option> #foreach($row in $Data.testData) <option id="$row.Id" >$row.TestType</option> #end </select></p>
4 年多之前 回复
u012648848
phd12tho 你帮我实现下吧: 我这个功能是这样子的:在下拉框中选则某项,然后,另一个下拉框中就会动态添加option项。。。 页面代码 后发。
4 年多之前 回复

#foreach($row in $Data.testData)这些语句是在服务器端解析后生成需要的内容,和js语法没关系吧。。只可能是这个框架导入的js脚本冲突什么的

u012648848
phd12tho 我的$Data.testData是一个table.rows集合,有三个字段分别为TestName,TestType,Id。但是我现在还没找到合适的方法赋值过去。。。。大神你怎么看?
4 年多之前 回复
showbo
支付宝加好友偷能量挖 回复u012648848: 你应该用nvelocity生成js数组,然后select change后获取数组中对应项添加到另外一个select中
4 年多之前 回复
u012648848
phd12tho 你也帮我实现下吧: 我这个功能是这样子的:在下拉框中选则某项,然后,另一个下拉框中就会动态添加option项。。。 页面代码 下面评论有。
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
如何在 中使用javascript
<%@ Import Namespace="System.Data" %>rn<%@ Import Namespace="System.Data.OleDb" %>rn ")rn rn rn elsern rn Response.Write(" ");rn rnrnrn rn rnrn为什么提示:由于先前已在此页中指定了另一种语言,因此不能使用“javascript”。rnrn那么怎么在这里使用javascript呢?
如何在javascript中使用公式
如何在javascript中使用公式
如何在asp.net中使用javascript?
我在asp.net页面中嵌入了javascript代码,其作用是修改客户端上的一些显示,无需与客户端通讯,我通过服务器控件 button 的OnClientClick 属性将我自定义的javascript 函数连接在一起。当我通过 vs2005调试我的程序时,这些javascript都能被正确执行,但是当我部署到iis时,这些javascript代码就没有被执行,请问是什么原因,谢谢指教
如何在javascript中使用变量ID???
我用div如何用javascrip在onclick后传入一个id号,而使用这个id(id是个变量了),使div隐或显示id.style.visibility="show"(或hidden)
如何在JavaScript中使用JSTL表达式
下列代码,如何在蓝色语句处使用红色语句定义的对象的相关操作(比如说将蓝色语句换成 pic.getFileName()方法取得的字符串)rn<%@ page language="java" contentType="text/html; charset=UTF-8"rn pageEncoding="UTF-8"%>rn<%@ page language="java" import="java.util.*" %>rn<%@ page language="java" import="com.lnsytc.news.model.*" %>rn<%@ page language="java" import="java.text.*" %>rnrnrnrnrnrn rn 焦点图rnrn[color=#FF0000]<%rnList list = (List)request.getAttribute("allpicnews");rnPicnews pic = (Picnews)list .get(0);rnrnrn%>[/color]rnrnrnrnrn rnrn
如何在 JavaScript 中更好地使用数组
使用 Array.includes 替代 Array.indexOf “如果需要在数组中查找某个元素,请使用 Array.indexOf。” 我记得在我学习 JavaScript 的课程中有类似的这么一句话。毫无疑问,这完全正确! 在 MDN 文档中,对 Array.indexOf 的描述是:返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。因此,如果在之后的代码中需要用到(给...
如何在javascript中使用数组参数
我想在javascript中调用一个activex的函数,该函数的参数是一个char 类型的数组,请问我在javascript中怎么调用该函数,怎么传参数给这个函数,谢谢。
如何在javascript中使用vbscript呢?
如何在javascript中使用vbscript呢?
请教如何在javascript中使用多维数组?
请教如何在javascript中使用多维数组?哪位大侠给指点指点!不胜感激
如何在HTML中使用JavaScript
一、&amp;lt;script&amp;gt;元素 asyne:表示立即下载脚本,但不妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本。只对外部脚本文件有效。 charset:表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少使用。 defer:表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部文件有效。 src:表示包含要执行代码的外部文件。 typ...
如何在JavaScript中使用PHP变量?
我有一个PHP函数返回值是$a,在javascript中有个IF语句,如果JavaScipt的变量var B等于PHP中的变量$a,则执行一个操作,应该如何写程序?
如何在HTML代码中使用JavaScript的变量
我想在HTML代码中使用JS中计算出的屏幕宽度,然后加上一个值来设定几个对象的位置。请问如何处理。
如何在asp的<%...%>中使用javascript呢?
如何在asp的<%...%>中使用javascript呢?rnrn比如:使用alert("hello");
javascript如何在类中使用定时器?
下面这段代码是不能运行的,但大家应该能很容易的猜出我想干什么,请问我如何才能做到呢?rn关于javascript对象模型我一直都不是太明白,不知道这样的功能在javascript中应该如何描述,望高手不吝指教!rn如果这个问题确实涉及到很高深的理论,我愿意加分。rnrn[code=JScript]function foo( c )rnrn this.cnt = c;rn this.start = function()rn rn setInterval( DoSomething, 1000 );rn rn this.DoSomething = function()rn rn this.cnt++; // just do somethingrn rnrnrnvar f1 = new foo( 1 );rnf1.start();rnrnvar f2 = new foo( 100 );rnf2.start();rnrnvar f3 = new foo( 243 );rnf3.start();rn[/code]rn
如何在JavaScript中使用变量赋值
//我先定义了变量arnvar a="http://localhost/ggao/tupian/1.gif";rnrn//我想将下面的图片连接地址用变量a来调用rnrnrn//如何实现 555,急用~!~!~
如何在javaScript中更好地使用数组
伙伴们好!本文对比了以下两组关于数组的操作方法: 1、Array.indexOf 、 Array.includes、Array.some; 2、Array.find 与 Array.filter; 1、Array.indexOf 、 Array.includes、Array.some Array.indexOf 的描述:返回在数组中可以找到的给定元素的索引值,如果不存在,则返回“-1”; Arra...
php的变量如何在javascript中使用???
php的变量如何在javascript中使用???
如何在ASP中使用JAVASCRIPT
各位高手,请问如何在ASP中使用JAVASCRIPT,如何调用JAVASCRIPT的变量。举一些例子。谢谢
如何在 winform 中使用 javascript
比如 要使 一个 Label 的值 滚动(Label.Text)rnrn就像网页中的那些滚动新闻一样!
跪求:vs2005中如何使用NVelocity的例子或NVelocity中文教程
求:vs2005中如何使用NVelocity的例子或NVelocity中文教程rnrn这做一个项目,vs2005中要用到NVelocity, 不知道怎么使用,请赐教。
如何在javascript中传入参数
我用asp编程,但是里面用到javascript脚本语言,现在我想把一个有值的变量放到javascript脚本里,例如rn<%rna=10rn%>rn rn我想把a赋给time2,怎么写?
如何在javascript中去掉
-
struts中如何在javascript中操纵?
我使用struts结构的标记库时,对标记库的使用很头疼。请问如果我在中要响应一个onclick事件,在javascirpt中实现的提交动作,那我应该怎么做才能实现这个过程呢?我不知道如何在javascript中操纵
请问如何在JAVASCRIPT中使用ASP中的变量
直接在 rn这样用报错,有什么问题吗
如何在javascript中使用asp中定义的变量
<%rndim abrnab="hello"rn%>rnrn rnrn大约像这样。rn
请问一下如何在C#中使用javascript中的变量值??
rn这是showmodeldialog 子窗口中用javascript得到的交窗口的值,,现在我下面的page_load代码中应用这个parm的值///请问如何实现???
如何在css中使用javascript中的变量
如何在css中使用javascript中的变量
javascript如何在.js文件中使用jsp中的变量
在同一个jsp页面中rnrn<%String str="abc";%>rn...rn rnrn这样是可以的,但我现在想将脚本写入另外的.js文件中就不行了,可否解决?
如何在javaScript中使用jsp代码中定义的变量???
<%rn int id=Integer.parseInt(request.getParameter("id"));rn //String id=request.getParameter("id");rn String query="select * from v_publish where id="+id;rn ResultSet rs=dbBean.executeQuery(query);rn String book_name="";rn String book_type="";rn if(rs.next())rn rn book_name=rs.getString("book_name");rn if(book_name==null) book_name="";rn book_type=rs.getString("book_type");rn if(book_type==null) book_type="";rn rn rs.close(); rn%>rn rn求各位大侠予以指教!!!
求教:如何在HTML中使用javascript中定义的变量
rnrn rn此处要显示screenW,screenH应该怎么做?rnrnrnrnrn rn rnrn rnrn rn
如何在javascript中使用vbscript中的函数呢?
如何在javascript中使用vbscript中的函数呢?比如说在javascript中调用vbscript中的isdate()等等其它函数。
请问如何在JavaScript中使用VBScript中定义的变量
我要在一个ASP页中同时使用JavaScript和VBScript两种语言,但我无法取rn到用VBScript定义的变量,也无法使用在Global.asa定义的Application和Session对象中的信息rn有那位大侠有此方面的经验,望不吝赐教,这里先谢过了急!急!急!急!急!
如何在javascript中使用java中的TreeMap类
我在一个jsp中设计了两个select,其中一个的值确定后,另一个根据它的选择确定option ,但所有的处理都存放在一个TreeMap 类中,如何实现呢?
如何在VBscript中使用javascript中的参数,变量
如何在VBscript中使用javascript中的参数,变量
如何在javascript脚本中使用 在session中的变量
如何在javascript脚本中使用 存放在session中的变量。rnrn谢谢。最好提供一段原代码
求助:如何在JAVASCRIPT中使用javascript:location.replace(“文件名”)
在根目录下有文件夹:Test,Test下有文件a.asp,可是小弟用javascript:location.replace('Test\a.asp')发现地址栏里是Testa.asp,请指教
JavaScript学习系列之一:如何在HTML中使用JavaScript
一,了解&amp;lt;script&amp;gt;元素:   在HTML中使用JavaScript就是在HTML页面中插入&amp;lt;script&amp;gt;元素,并在&amp;lt;script&amp;gt;和&amp;lt;/script&amp;gt;之间插入完整的正确的JavaScript脚本。其中一个HTML文档可以插入任意多个&amp;lt;script&amp;gt;元素,而且一般在任意合理嵌套标签的位置都插入&amp;lt;script&amp;gt;元素。按照...
ASP.NET 中如何使用 Nvelocity 模板 ????
如题rn最好能给个例子,谢谢各位了!!
如何在网页中既使用javascript,又使用VBscript
如何在网页中既使用javascript,又使用VBscriptrn有实例吗rn
请问如何在使用 javascript的html页面中使用cell插件?
怎么把插件加入进来?之后定义一个插件的实例,设置显示rn属性就能让插件的界面显示到网页中了吗?
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法