2012-05-31 2 views
1

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

<p:tabView id="unitTabs" cache="false" var="unit" value="#{getUnitsOfLoggedInUser(loginController.checkedUser)}"> 
     <p:tab id="unitTab" title="#{unit.unitName}"> 

      //content here 

     </p:tab> 
</p:tabView> 

В вспомогательном компоненте у меня есть этот метод

public List<Unit> getUnitsOfLoggedInUser(User user) { 
    unitsOfLoggedInUser = (List<Unit>) user.getUnitCollection(); 
    return unitsOfLoggedInUser; 
} 

Однако, если пользователь создает новый блок , новая вкладка не будет отображаться немедленно. Даже если я обновляю страницу, она все равно не отображается. Однако, если я перезапущу сервер и снова запустил, там будет новая вкладка. Кажется, что он имеет некоторое свойство кеширования и не загружается при каждом вызове.

Также, когда я отлаживаю код, метод getUnitsOfLoggedInUser(user) вызывается более одного раза до отображения страницы.

Я также попытался с помощью таблицы данных JSF, но он ведет себя так же, так что это не проблема библиотеки Primefaces

Кто-нибудь есть какие-либо предложения, как я могу решить эту проблему? Спасибо

ответ

3

Ответ зависит от способа сохранения новых единиц. Один из вариантов - обновить объект user после сохранения нового устройства. В любом случае вы могли бы сделать

em.refresh(user); 

после сохранения, где em ваш экземпляр EntityManager.

Обновление:

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

+0

Я добавил то, что вы сказали методу 'create', к EJB. Но я получаю исключение 'Caused by: java.lang.IllegalArgumentException: не удается обновить не управляемый объект: class web.effectinet.entities.User.' Я использую код netbeans, сгенерированный для EJB, поэтому я перезаписал метод create в' UnitFacade' EJB – interboy

+2

Это как и ожидалось. В методе создания устройства управление пользователями не выполняется. Трудно сказать, не зная своих сущностей и их отношений. Если у вас есть отношение пользователя и единиц 1: n, вы также можете добавить новый элемент в коллекцию пользователя, а затем слить/отредактировать пользователя, а не напрямую создавать новый блок. Тогда вам не нужно обновлять пользователя, потому что вы вручную добавили устройство в коллекцию. –

+0

Благодарим за помощь. Мне удалось это сделать, изменив атрибут unitCollection объекта пользователя вручную, когда устройство создано. Однако я хотел спросить кое-что из любопытства. Раньше я пытался создать метод обновления (User user) в User EJB. Однако при вызове этого из управляемого компонента я получил исключение 'java.lang.IllegalArgumentException: не удалось обновить не управляемый объект для [userId = 31]', который был зарегистрированным пользователем на данный момент. Я не могу понять, почему это не работает. Anyways снова спасибо – interboy

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