2014-11-04 4 views
-2

У меня есть всплывающее окно, в котором вам нужно выбрать компоненты для вас. Каждый компонент содержит метку и выпадающий список со всеми выбранными компонентами в базе данных. Рядом со списком появляется кнопка «добавить», при нажатии на нее появляется другое всплывающее окно, которое используется, когда пользователь не находит то, что он хочет в списке. Функция 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 компонентов

ответ

3

Как уже упоминал Эмиль, вложенные формы - это очень плохая вещь, от которой вы должны немедленно избавиться.

Кроме того, как предположил Эмиль, такое сообщение об ошибке обычно связано с неправильными селекторами компонентов. В основном это связано с тем, что в селекторе отсутствует родительский контейнер именования. Либо определить правильный идентификатор, используя для отладки инструмента или, вместо

<p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":dialog:list" /> 

попробуйте использовать некоторые из решений, предложенных в этой теме: Primefaces - Cannot find component with identifier outside the datatable

Я лично предпочитаю использовать следующий синтаксис, который опирается на primefaces - метод поиска идентификатора в различных именованных контейнерах:

<p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":#{p:component('list')}" /> 
+0

Не думайте, что проблема в формах, так как все отлично работает с формами, на самом деле мой метод добавления даже не вызывается, когда я удаляю формы, пробовал ваш синтаксис и все еще ничего. – FancyPants

+0

Вложенные формы на самом деле не запрещены jsf, но обычно описываются html-спецификацией (см. Http://stackoverflow.com/questions/379610/can-you-nest-html-forms и http://stackoverflow.com/questions/7371903/multiple-hform-in-a-jsf-page).Поэтому, если код, который вы предоставили с вложенными формами, работал для вас, я думаю, что это результат использования браузера, который очень либеральен в обработке html-разметки. Чтобы ваша программа работала стабильно для другого браузера, я настоятельно рекомендую вам пересмотреть свою структуру там. –

+0

Для части, связанной с идентификатором: Из приведенного кода примера я уже вижу, что «: dialog: list» не может работать, потому что в качестве контейнера именования отсутствует другая форма с идентификатором «popUp». Попробуйте использовать «: dialog: popUp: list», если вы действительно хотите придерживаться разметки, которую вы предоставили. –

2

Прежде всего, у вас есть вложенные формы, от которых вы должны избавиться.

Что касается вопроса, вы должны проверить конкретный элемент html (например, используя firebug), чтобы узнать его идентификатор.

+0

Применяется как ваши, так и предложения Лукаса. удалил вложенные формы и изменил синтаксис на 'update =": # {p: component ('list')} "' все еще не работает, но я думал разместить их в отдельных формах, но тогда, конечно, было бы больше, чем 15forms на веб-странице, если я это сделаю, что бы вы предложили? – FancyPants

+0

Я думаю, вам нужно сделать обновление вашего текущего вопроса и показать нам, как ваш код, чтобы мы могли видеть, как он выглядит после удаления вложенных форм. Что касается вашего вопроса относительно 15 форм на одной и той же веб-странице, я не знаю архитектуры вашей программы. Возможно, вы можете объяснить, почему вам нужны 15 разных форм, а не только 2 (один для вашей главной страницы и один внутри вашего диалога)? Если вам требуется повторное использование вашего кода, возможно, вы можете взглянуть на составные компоненты. –

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