Рассмотрим следующие два примера:
<c:if test="${errorMessage!=null}">
Welcome <c:out value="${homePageBean.currentUserName}"/>
Когда я смотрю на примеры связи между контроллером Spring и JSP с поддержкой JSTL, я замечаю, что программисты жестко кодируют имя объекта модели в контроллере, а затем жестко кодируют то же имя в JSP. Я пытаюсь найти лучший способ сделать это.
Я создал перечисление, которое содержит имена объектов модели.
public enum Bean {
ERROR_MESSAGE("errorMessage"),
LOGIN_PAGE_BEAN("loginPageBean"),
HOME_PAGE_BEAN("homePageBean");
private String beanId;
private Bean(String beanId) {
this.beanId=beanId;
}
public String getBeanId() {
return beanId;
}
}
Таким образом, в моем контроллере вместо жесткого имени объекта я просто делаю это:
String errorMessage=failedAttempt?"login.invalidUserNameOrPassword":null;
model.put(Bean.ERROR_MESSAGE.getBeanId(), errorMessage);
Но как бы я ни пытался, я не могу найти этот "bean" в jsp, используя Bean.ERROR_MESSAGE.getBeanId()
.
<c:out value="${errorMessage}" /> // works but uses hardcoded name
<c:out value="${Bean.ERROR_MESSAGE.getBeanId()}" /> // doesn't work
<c:out value="${<%=Bean.ERROR_MESSAGE.getBeanId()%>}" /> // doesn't compile
У кого-нибудь есть решение этого вопроса?