使用javascript中的索引获取spring模型属性列表元素

对不起,如果有人问过其他地方,但我已经四处寻找,找到了一些答案,但不是一个完整的例子,我仍然怀疑这个。

所以,我正在从我的Spring控制器添​​加一个Autopopulating列表到我的jsp,我想在我的javascript / jquery函数中的列表中添加项目。 可能吗?

我尝试了下面的代码来测试function,但它不起作用(列表元素根本没有显示在生成的html上)。 所以我不确定我是否搞砸了javascrit / spring / jsp语法,或者它是不可能的。

这是代码:

控制器代码:

@RequestMapping(value="/create_custobject.html",method = RequestMethod.GET) public ModelAndView showCreateCustObjectPage() { Map model = new HashMap(); CreateObjectForm form = new CreateObjectForm(); model.put("createObjectform", form); return new ModelAndView("create_custobject", model) ; } 

表格代码:

 public class CreateObjectForm { private AutoPopulatingList ruleArray = new AutoPopulatingList(Criteria.class); public AutoPopulatingList getRuleArray() { return ruleArray; } public void setRuleArray(AutoPopulatingList ruleArray) { this.ruleArray = ruleArray; } public CreateObjectForm() {} } 

标准代码:

 public class Criteria{ String attribute; String operator; //... constructor + getters and setters } 

javascript / jquery代码(与jsp在同一页面上):

  $(document).ready(function(){ //startup functionality var i = 0; document.getElementById("addCriteria").onclick = function() { $("#msgid").html("${ruleArray[i].attribute}"); ${ruleArray[i].attribute} = $('#attributeValue').val(); ${ruleArray[i].operator} = $('#operatorValue').val(); i++; } } 

对于表单中的现有项目,请使用jstl as

    

这将呈现这样的forms

 

然后你只需添加javascript新表单“行”与相应的索引

例如

  var is = $('.count').size() $('#idform span:last').after('') 

我认为如果你使用spring 3 +你不需要使用AutopopulatingList,任何集合都应该足够了。

你混合JSP EL和Javascript不正确。 您不能在JSP表达中使用var i ,即。 ${ruleArray[i].operator} 。 我建议使用JSTL迭代列表并在脚本中创建属性。

此时,您的脚本可以设置为只在表达式中使用字符串文字0 。 我假设你需要比这更强大的function,你能更好地描述它。

 $(document).ready(function(){ document.getElementById("addCriteria").onclick = function() { $("#msgid").html("${ruleArray[0].attribute}"); //I assume you wanted to set the element to the value pulled from JSP EL $('#attributeValue').val(${ruleArray[0].attribute}); $('#operatorValue').val(${ruleArray[0].operator}); } } 

使用JSTL解决方案看起来像:

  

这个解决方案基本上使用JSTL来编写Javascript。 修改控制器以返回JSON并在页面加载时进行Ajax调用可能是更好的解决方案。

在以下行中,您在jsp代码中引用了i ,但我没有定义:

 $("#msgid").html("${ruleArray[i].attribute}"); 

定义i的javascript代码在客户端(即浏览器)上执行。 在将呈现的html发送到客户端之前,jsp代码在服务器上执行。