使用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代码在服务器上执行。