【问题标题】:Spring form -- modelAttribute name as java constantSpring 表单——modelAttribute 名称为 java 常量
【发布时间】:2012-05-05 01:58:47
【问题描述】:

为了不在代码中重复自己,我使用 modelAttribute 名称作为 java 常量

@Controller
@RequestMapping("/")
public class Controller {
    public static final String MODEL_ATTRIBUTE = "myModel";

    public String renderPage(Model model) {
        model.addAttribute(MODEL_ATTRIBUTE, ...);
        return "index";
    }
}

现在我使用 scriptlet 将此常量导入 JSP(我知道 scriptlet 不好,但我不熟悉更好的解决方案)。

<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<%@page import="static com.example.Controller.*" %>

<form:form action="/" modelAttribute="<%= MODEL_ATTRIBUTE %>">

    <form:label path="attr1">Attribute:</form:label>
    <form:input path="attr1" />

    <c:forEach items="${???.attr2}" var="item">
        ...    
    </c:forEach>
    <input type="submit" />
</form:form>

我应该如何在 forEach 循环中引用 modelAttribute 对象? Spring 表单中的DRY 有更好的解决方案吗?

【问题讨论】:

    标签: java forms spring scriptlet modelattribute


    【解决方案1】:

    使用型号名称,

    <c:forEach items="${myModel.attributeNameFromYourModel}" var="item">
            ...    
    </c:forEach>
    

    【讨论】:

    • 感谢您的回答。我问这个问题的原因是我不想直接使用模型名称。我想将它存储在一个地方,例如用于整个应用程序的 java 常量。如果我使用您的方法并且我想更改模型名称,那么我必须至少在两个不同的地方更改它。这可能会在未来带来许多愚蠢的错误。
    • @kurochenko 我理解你的心情。但是 JSP 不能那样工作,除非你使用 scriptlet,这是邪恶的
    • 个人不喜欢使用scriptlet。但是我在这里可以建议的是在 jsp 中分配模型属性名称并在其他地方引用分配的值。例如: 但不幸的是它使它更脏:(
    猜你喜欢
    • 2012-12-20
    • 2011-11-06
    • 2017-05-25
    • 2021-12-14
    • 2015-05-10
    • 2012-01-01
    • 2014-12-20
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多