如何在JSP中动态生成HTML标记属性?

时间:2016-08-06 14:20:58

标签: jsp attributes jstl dynamic-forms

我正在尝试在JSP中生成HTML标记属性。下面的类表示HTML输入元素,parameters字段表示标记属性。

public class Input {

    private Map<String, String> parameters;

    public Input() {
        parameters = new HashMap<>();
    }

    // getters and setters
}

在我的Spring MVC控制器中,我创建了一个列表,其中包含输入并将其传递给我的模型。

@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Model model) {
    List<Input> inputs = new ArrayList<>();
    // Creating objects and adding them to the list.
    model.addAttribute("inputs", inputs);
    return "add";
}

我已经检查过并且所有对象都已正确创建。我在jsp

中以正确的方式将它们打印出来有问题
<c:forEach var="input" items="${inputs}">
    <div class="form-group">
        <label for="${input.parameters['id']}">${input.parameters['title']</label> 
        <input 
            <c:forEach var="param" items="${input.parameters}">
                <c:out value="${param.key}" />=<c:out value="${param.value}" />
            </c:forEach>
        />
        <form:errors path="${input.parameters['name']}" />                      
    </div>
</c:forEach>

但是,不呈现输入属性:

<input =="="></input>

这不是我的期望。我的语法出了什么问题?

1 个答案:

答案 0 :(得分:0)

忽略糟糕的建筑设计,你的逻辑看起来很好。只有${param}是表示HTTP请求参数映射的保留 EL变量。例如。 ${param.foo}打印bar的{​​{1}}值。另请参阅our EL wiki page

http://example.com/context/page?foo=bar重命名为其他内容并重试。使用&#34;属性&#34;和&#34;属性&#34;而不是&#34;参数&#34;和&#34; param&#34;会更有意义,代码更易读。

var="param"