обновление и визуализированные теги в JSF

#javascript #jsf #primefaces

#javascript #jsf #первичные пространства

Вопрос:

Я пытаюсь отобразить / не отображать данные primefaces, используя тег update в primefaces.

Таблица будет отображаться правильно при перезагрузке (F5) страницы, но тогда я потеряю все данные, которые я ввел в форму. Я искал решение ajax, но пока мне не удалось его найти.

Мой код:

 <h:form id="adminForm">
  <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}">
    <f:selectItem itemValue="" itemLabel="- Select One -"/>
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminForm" />
  </h:selectOneMenu>
  <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}"
    emptyMessage="No Records Found">
    ...
  </p:dataTable>
</h:form>
  

Текущая реализация отображает DataTable, но стирает все входные данные формы, которые у меня были. Есть ли способ отобразить datatable без очистки значений моей формы?

Обновление: Просто попробовал тот же код без и использовал, но получил тот же результат, все еще пробуя другие методы!

Комментарии:

1. В какой области находится ваш adminBean?

2. #{adminBean.Type} Недопустимо. Разве это не должно быть #{adminBean.type} ? Ты пробовал update="adminMacTable" ?

3. извините, я изменил часть кода, когда вставлял его, спасибо за уловку 🙂

Ответ №1:

Попробуйте это:

  <h:form id="adminForm" prependId="false">
  <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}">
    <f:selectItem itemValue="" itemLabel="- Select One -"/>
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminMacOutput" />
  </h:selectOneMenu>
  <p:outputPanel id="adminMacOutput">
  <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}"
    emptyMessage="No Records Found">
    ...
  </p:dataTable>
  </p:outputPanel>
 </h:form>
  

Если это не сработает, попробуйте поместить datatable в отдельную форму и обновить эту вторую форму.

Комментарии:

1. p: outputPanel была правильным решением! На самом деле я использовал это раньше, но забыл о том, насколько это было полезно :). Спасибо!

Ответ №2:

Я предполагаю, что AdminBean может находиться в области запроса, и в этом случае ваше событие ajax обновит его, но затем оно будет воссоздано при нажатии F5. Если это так, то ViewScoped поможет:

 @ManagedBean(name = "adminBean")
@ViewScoped
public class AdminBean {

}
  

Комментарии:

1. В настоящее время реализация ограничена рамками диалога, я просто попробовал то же самое еще раз, но с p: panel вместо формы. К сожалению, такое же поведение: (