#ajax #jsf #richfaces
#ajax #jsf #богатые интерфейсы
Вопрос:
Пожалуйста, посмотрите на следующий фрагмент кода:
<h:form>
<h:panelGrid columns="2">
<h:inputText value="#{vehicleBean.pin}" />
<a4j:commandButton action="#{vehicleBean.loadVehiclesByPin}" render="results"/>
</h:panelGrid>
</h:form>
<a4j:outputPanel id="results">
<rich:dataTable value="#{vehicleBean.vehicles}" rendered="#{not empty vehicleBean.vehicles}">
...
</rich:dataTable>
</a4j:outputPanel>
Когда я нажимаю кнопку, отправляется Ajax-запрос для загрузки некоторых бизнес-объектов.
Они отображаются в rich:DataTable, который отображается только в том случае, если соответствующий массив не пуст.
У меня это работает в Chrome и Firefox 4, но не в IE9. Но я почти уверен, что это моя вина, а не IE 😉
Итак, пожалуйста, скажите мне:
- Каков правильный подход к решению такого рода проблем (с условно отображаемым элементом)?
- Какой элемент (ы) мне следует рендерить повторно?
- У CommandButton также есть атрибут execute: когда и почему я должен использовать этот атрибут?
Приветствую Себи
Ответ №1:
RichFaces 3.x не поддерживает IE9, обратитесь к этому сообщению: http://community.jboss.org/thread/156720
Вы можете перейти на RF 4 или внедрить фильтр, чтобы заставить IE9 работать в режиме совместимости:
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
resp.addHeader("X-UA-Compatible", "IE=EmulateIE8");
chain.doFilter(request, resp);
}
Ответ №2:
некоторые вещи, которые вы могли бы исправить:
- пусть ваш тег form окружает все компоненты JSF
- если loadVehiclesByPin зависит от значения pin, вы должны выполнить компонент inputText (присвоить ему идентификатор, например, «inputPin») с помощью командной кнопки, подобной этой: execute=»@this inputPin«
- я не уверен, правильно ли вы используете в in render=»результат» (помните о концепции NamespaceContainer, прочитайте javadoc UIComponent.FindComponent )
для лучшей отладки я предлагаю включить PROJECT_STAGE=Разработка в web.xml и для открытия консоли javascript вашего браузера.
Имейте в виду, что при использовании условного рендеринга вам нужно указать свой параметр рендеринга на идентификатор в вашем дереве компонентов JSF, который уже есть (вы сделали прямо здесь, окружив свою условную таблицу данных панелью)
с уважением