Используйте enum для получения бина страницы - PullRequest
1 голос
/ 07 января 2012

Рассмотрим следующие два примера:

<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

У кого-нибудь есть решение этого вопроса?

1 Ответ

0 голосов
/ 07 января 2012

Вам придется дважды ссылаться на один и тот же «идентификатор», будь то жестко заданный String, имя класса или что-то еще. Один раз в контроллере и один раз в поле зрения.

Я вижу, где вы пытаетесь использовать более запрограммированный подход, и теоретически это хорошая идея, но вам в конечном итоге приходится внедрять скриптлеты в свой JSP, чтобы это произошло. Лучше всего избегать этого без необходимости.

Я бы порекомендовал некоторые четко определенные константы для использования в ваших классах контроллеров (чтобы вы не жестко программировали Strings во всем коде Java) и придерживался ссылок на эти String по именам в ваших JSP ( как ты сейчас делаешь). Это общий подход, используемый большинством приложений MVC.

...