У меня есть всплывающее окно, в котором вам нужно выбрать компоненты для вас. Каждый компонент содержит метку и выпадающий список со всеми выбранными компонентами в базе данных. Рядом со списком появляется кнопка «добавить», при нажатии на нее появляется другое всплывающее окно, которое используется, когда пользователь не находит то, что он хочет в списке. Функция add вызывает метод, который проверяет вход пользователя для уже существующих входов и добавляет, если их нет. МОЯ ПРОБЛЕМА: это то, что я не могу найти решение для обновления списка, который был обновлен. Я пытаюсь использовать <p:ajax />
, но я продолжаю получать Не могу найти компонент ошибок.Выпадающий список «Праймз-Обновление»
--- HTML КОД ----
<form id="dialog">
<h:outputText value="Computer: " styleClass="dialog-labels" />
<ul style="list-style-type: none">
<li>
<div class="dialog-container">
<h:outputLabel value="Processor: " style="float:left;" />
<p:selectOneMenu id="procs" filterFunction="true" filterMatchMode="true" styleClass="dialog-dropdown-list" style="width:15em;">
<f:selectItem itemLabel="Select Processor" itemValue="" noSelectionOption="true" />
<f:selectItems id="list" value="#{javaHTMLConnection.procList}" />
</p:selectOneMenu>
<p:commandButton value="Add" id="addProc" styleClass="dialog-buttons" onclick="PF('addProcBox').show();" style="font-size: 10px;" />
<h:form id="popUp">
<p:dialog header="Add Processor" widgetVar="addProcBox" height="200" width="180" draggable="false" resizable="false" style="font-size:13px;">
<h:outputLabel value="Processor: " style="float:left;" />
<p:inputText id="procInput" value="#{components.procID}"/>
<p:growl id="growl" life="10000" />
<p:commandButton value="Save" styleClass="dialog-bottom-buttons" action="#{components.addProcessor()}" update="growl" onclick="PF('addProcBox').hide();" style="font-size: 10px;" />
<p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":dialog:list" />
<p:commandButton value="Cancel" id="CancelAddProc" styleClass="dialog-bottom-buttons" onclick="PF('addProcBox').hide();" style="font-size: 10px;" />
</p:dialog>
</h:form>
</div>
</li>
</form>
---- JavaHTMLConnection ----
public void onAdd()
{
if(components.addProcessor()==true)
{
components.getAllComponents();
}
}
---- Компоненты (Java-код) ----
public boolean addProcessor()
{
try
{
db.openDatabase();
db.con.setAutoCommit(false);
if (!db.ifExists("processor.name", "processor", procID))
{
db.Entry("processor", procID);
addMessage("Success ! Your input has been saved");
return true;
}
else
{
addMessage("Error, the input already exists");
}
}
catch (SQLException e)
{
try
{
db.con.rollback();
}
catch (SQLException e1)
{
e1.printStackTrace();
}
e.printStackTrace();
}
finally
{
try
{
db.con.setAutoCommit(true);
}
catch (SQLException e)
{
e.printStackTrace();
}
}
return false;
}
PS: не против именование как тогда, когда это будет выяснял все будет сделано общим, как мне нужно, чтобы приспособить это более 15 компонентов
Не думайте, что проблема в формах, так как все отлично работает с формами, на самом деле мой метод добавления даже не вызывается, когда я удаляю формы, пробовал ваш синтаксис и все еще ничего. – FancyPants
Вложенные формы на самом деле не запрещены jsf, но обычно описываются html-спецификацией (см. Http://stackoverflow.com/questions/379610/can-you-nest-html-forms и http://stackoverflow.com/questions/7371903/multiple-hform-in-a-jsf-page).Поэтому, если код, который вы предоставили с вложенными формами, работал для вас, я думаю, что это результат использования браузера, который очень либеральен в обработке html-разметки. Чтобы ваша программа работала стабильно для другого браузера, я настоятельно рекомендую вам пересмотреть свою структуру там. –
Для части, связанной с идентификатором: Из приведенного кода примера я уже вижу, что «: dialog: list» не может работать, потому что в качестве контейнера именования отсутствует другая форма с идентификатором «popUp». Попробуйте использовать «: dialog: popUp: list», если вы действительно хотите придерживаться разметки, которую вы предоставили. –