Условное утверждение EL во входном значении приводит к недопустимому синтаксису для операции набора - PullRequest
0 голосов
/ 29 февраля 2012

Я недавно обновил свое веб-приложение до JSF 2.0 (MyFaces 2.0.9) и использовал tomcat 6 (контейнер Servlet 2.5).

Ранее (до обновления до JSF 2) в файлах JSP у меня были такие записи, как:

    <h:selectOneMenu id="country"
           value="#{myBean.countrySelectionControl ? (empty myBean.restrictedCountry ? '' : myBean.restrictedCountry)  : myBean.countryCode}"
           onchange="submit()"
           disabled="#{myBean.countrySelectionControl}">
            <f:selectItem itemValue="" itemLabel="------------------Select-----------------" />
            <f:selectItem itemValue="here" itemLabel="Here" />
            <f:selectItem itemValue="there" itemLabel="There" />
    </h:selectOneMenu>

, но с момента обновления такие операторы вызывают ошибки, как показано ниже:

ОШИБКА: org.ajax4jsf.webapp.BaseXMLFilter - Исключение в цепочке фильтров javax.servlet.ServletException: /jsp/CrudUser.jsp(79,9) '# {myBean.countrySelectionControl? (пустой myBean.restrictedCountry? '': myBean.restrictedCountry): myBean.countryCode} 'Недопустимый синтаксис для операции над множествами

Теперь я знаю, что могу просто переместить логику обратно в Backbean, но перед тем, как сделать это, я хотел проверить, есть ли другая альтернатива и узнать, что такое «лучшая практика» в таких случаях.

1 Ответ

2 голосов
/ 29 февраля 2012

Существует общее эмпирическое правило, позволяющее сохранить как можно больше логики в вашем Java-коде (модель + контроллер), в отличие от наличия логики в шаблонах (представление).У вас там была довольно сложная логика в xhtml, поэтому перенос ее на bean-компонент соответствовал бы этому правилу.

...