2011-01-17 2 views
2

Использование DataModel<MyObject>, я заполняю таблицу данных в соответствии с this responseJSF: Обновить страницу после того, как данные изменить

Теперь в конце каждой строки у меня есть кнопка удаления, которая вызывает определенный метод моего компонента. Данные будут удалены. Но по мере того, как данные были изменены после удаления, я бы хотел перезагрузить страницу, чтобы отразить изменения.

Моя попытка была добавить правило навигации в faces-config.xml:

обзор /overview.jsp deletedsubscription /overview.jsp

Если у меня есть <redirect /> или нет, в любом случае он не перезагружает или вообще ничего не делает. Данные удаляются, поэтому на самом деле вызывается метод bean.

Моя кнопка выглядит следующим образом:

<h:dataTable border="1" value="#{overviewBean.overviewModel }" var="item" first="0"> 
    <h:column id="column13"> 
     <f:facet name="header"> 
      <h:outputText value="#{messages.overviewDeleteItem }"></h:outputText> 
     </f:facet> 
     <h:commandButton action="#{overviewBean.deleteItem}" value="X"/> 
    </h:column> 
</h:dataTable> 

Установка атрибута type="submit" фактически решает эту проблему. Страницы загружаются.

Мой вопрос сейчас: действительно ли требуется подача? Не имеет ли JSF (Apache MyFaces) какой-либо механизм использования AJAX для устранения только что удаленной строки?

Спасибо за попытку помочь новичку JSF.

ответ

4

Просто удалите элемент из справочного списка данных. Изменения будут отражены в модели.

В основном:

private List<MyObject> overviewList; 
private DataModel overviewModel; 

public OverviewBean() { 
    overviewList = overviewDAO.list(); 
    overviewModel = new ListDataModel(overviewList); 
} 

public void deleteItem() { 
    MyObject myObject = (MyObject) overviewModel.getRowData(); 
    overviewDAO.delete(myObject); 
    overviewList.remove(myObject); // See? 
} 

редирект после этого не нужно. Если метод действия возвращает void (или null), он все равно перейдет на ту же страницу.

В JSF 2.0 были введены аяксиальные возможности, но если я не ошибаюсь, вы все еще находитесь на JSF 1.x. Лучше всего использовать библиотеку сторонних компонентов, такую ​​как Ajax4jsf (в настоящее время часть RichFaces), в том случае, если вы считаете это необходимым.

+0

Еще один хороший ответ. Благодаря! Ну ... когда у меня был метод, возвращающий 'void', eclipse жаловался на это в JSP-редакторе ... Попробует еще раз. – Atmocreations

+0

Eclipse - это рывок. Игнорируйте и запустите его. Эти ошибки/предупреждения настраиваются. В конце концов вы также можете просто вернуть «null». – BalusC

+0

Eclipse is cool =) Это помогло мне со многими моментами в процессе жесткого обучения JSF. Но да, вы правы, иногда он жалуется на большее, чем нужно. Возможно, это зависит от реализации (Myfaces/Mojarra или как это называется). благодаря! – Atmocreations

Смежные вопросы