Я работаю над приложением 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
Кто-нибудь есть какие-либо предложения, как я могу решить эту проблему? Спасибо
Я добавил то, что вы сказали методу 'create', к EJB. Но я получаю исключение 'Caused by: java.lang.IllegalArgumentException: не удается обновить не управляемый объект: class web.effectinet.entities.User.' Я использую код netbeans, сгенерированный для EJB, поэтому я перезаписал метод create в' UnitFacade' EJB – interboy
Это как и ожидалось. В методе создания устройства управление пользователями не выполняется. Трудно сказать, не зная своих сущностей и их отношений. Если у вас есть отношение пользователя и единиц 1: n, вы также можете добавить новый элемент в коллекцию пользователя, а затем слить/отредактировать пользователя, а не напрямую создавать новый блок. Тогда вам не нужно обновлять пользователя, потому что вы вручную добавили устройство в коллекцию. –
Благодарим за помощь. Мне удалось это сделать, изменив атрибут unitCollection объекта пользователя вручную, когда устройство создано. Однако я хотел спросить кое-что из любопытства. Раньше я пытался создать метод обновления (User user) в User EJB. Однако при вызове этого из управляемого компонента я получил исключение 'java.lang.IllegalArgumentException: не удалось обновить не управляемый объект для [userId = 31]', который был зарегистрированным пользователем на данный момент. Я не могу понять, почему это не работает. Anyways снова спасибо – interboy