2017-02-13 20 views
0

У меня возникла проблема с модальным диалоговым окном в Primefaces6.0. У меня простой формат данных с несколькими режимами выбора. Datatable также имеет входной текстовый компонент и событие rowselect, диалоговое окно заполняет отображение дополнительной информации относительно строки. Проблема здесь в том, когда я сначала нажимаю на строку данных, появляется диалоговое окно (вот как оно должно работать). Теперь закройте диалоговое окно и начните вводить текст в соответствующем текстовом компоненте и нажмите пробел, появится диалоговое окно (это настоящая ошибка). Эта проблема существует только в Primefaces6.0, и тот же код отлично работает в версии Primefaces5.3. Поскольку отзывчивость/изменение размеров данных и других компонентов возможно в Primefaces6.0, я должен придерживаться этого и не могу пойти с другим. Пожалуйста, помогите мне в решении моей проблемы.Диалоговое окно показывает, когда пробел попадает в datatable of Primefaces6.0,

образцы

код ниже: -

index.xhtml

<p:dataTable id="dtEmployee" value="#{mbEmployee.lstEmployee}" var="emp" selection="#{mbEmployee.lstSelectedEmp}" rowKey="#{emp.regNo}"> 
     <p:ajax event="rowSelect" update=":frmEmployee:diShow" oncomplete="PF('dgInfo').show();"/> 

     <p:column headerText="Employee No"> 
      <h:outputText id="lblReNo" value="#{emp.regNo}"/> 
     </p:column> 
     <p:column headerText="Employee Name"> 
      <h:outputText id="lblEmpName" value="#{emp.employeeName}"/> 
     </p:column> 
     <p:column headerText="Employee City"> 
      <h:outputText id="lblCity" value="#{emp.city}"/> 
     </p:column> 
     <p:column headerText="Feedback"> 
      <p:inputText id="txtFeedback" value="#{mbEmployee.feedback}"/> 
     </p:column> 
     <p:column headerText="Select" selectionMode="multiple" style="text-align: center"/> 
    </p:dataTable> 



    <p:dialog id="diShow" modal="true" widgetVar="dgInfo" closable="true"> 
     <p:panelGrid columns="2"> 
      <p:outputLabel id="DispRegNo" value="Reg No"/> 
      <p:outputLabel id="lblDispRegNo" value="#{mbEmployee.lstSelectedEmp[0].regNo} "/> 
      <p:outputLabel id="DispName" value="Employee Name"/> 
      <p:outputLabel id="lblDispName" value="#{mbEmployee.lstSelectedEmp[0].employeeName}"/> 
      <p:outputLabel id="DispCity" value="City"/> 
      <p:outputLabel id="lblDispCity" value="#{mbEmployee.lstSelectedEmp[0].city}"/> 
     </p:panelGrid> 
    </p:dialog> 

Java класс:

@ManagedBean(name = "mbEmployee", eager = true) 

public class employee { 
    private List<employeeBean> lstEmployee; 
    private List<employeeBean> lstSelectedEmp; 
    private String feedback; 

    public String getFeedback() { 
     return feedback; 
    } 

    public void setFeedback(String feedback) { 
     this.feedback = feedback; 
    } 

    public List<employeeBean> getLstEmployee() { 
     return lstEmployee; 
    } 

    public void setLstEmployee(List<employeeBean> lstEmployee) { 
     this.lstEmployee = lstEmployee; 
    } 

    public List<employeeBean> getLstSelectedEmp() { 
     return lstSelectedEmp; 
    } 

    public void setLstSelectedEmp(List<employeeBean> lstSelectedEmp) { 
     this.lstSelectedEmp = lstSelectedEmp; 
    } 

    public employee() { 
     lstEmployee = new ArrayList<>(); 
     lstEmployee.add(new employeeBean("ABC", "XYZ", 45, 1001)); 
     lstEmployee.add(new employeeBean("DEF", "XYZ", 45, 1002)); 
     lstEmployee.add(new employeeBean("GHI", "XYZ", 45, 1003)); 
     lstEmployee.add(new employeeBean("JKL", "XYZ", 45, 1004)); 
     lstEmployee.add(new employeeBean("MNO", "XYZ", 45, 1005)); 
    } 
} 

боб класс:

public class employeeBean { 

    private String employeeName, city, feedback; 
    private int age, regNo; 

    public String getEmployeeName() { 
     return employeeName; 
    } 

    public void setEmployeeName(String employeeName) { 
     this.employeeName = employeeName; 
    } 

    public String getCity() { 
     return city; 
    } 

    public void setCity(String city) { 
     this.city = city; 
    } 

    public String getFeedback() { 
     return feedback; 
    } 

    public void setFeedback(String feedback) { 
     this.feedback = feedback; 
    } 

    public int getAge() { 
     return age; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public int getRegNo() { 
     return regNo; 
    } 

    public void setRegNo(int regNo) { 
     this.regNo = regNo; 
    } 

    public employeeBean(String employeeName, String city, String feedback, int age, int regNo) { 
     this.employeeName = employeeName; 
     this.city = city; 
     this.feedback = feedback; 
     this.age = age; 
     this.regNo = regNo; 
    } 

    public employeeBean(String employeeName, String city, int age, int regNo) { 
     this.employeeName = employeeName; 
     this.city = city; 
     this.age = age; 
     this.regNo = regNo; 
    } 
} 

Пожалуйста, дайте мне знать, если таковые имеются в коде существует ошибка или любой взлом для решения этой проблемы.

ответ

0

Вы правы: как я могу прочитать об этом, это открытая проблема. Ну мое решение этой проблемы очень простое

  1. Добавьте класс, как "в", чтобы inputText

    <p:inputText styleClass="in" value="#{mbEmployee.feedback}" /> 
    
  2. Использование JQuery для остановки распространения события (родительское остановка)

    $(document).on("ready", function(){ 
    
        $(".in").keydown(function(e){ 
         e.stopPropagation(); 
        }); 
    }); 
    
  3. Проверьте этот образец Easy way

Обращаем ваше внимание, что: Я удалил идентификатор из тэга inputText. Не забывайте, что значение «mbEmployee.feedBack» является одиночным для всех тегов inputText.

Надеюсь, это полезно! С уважением!

+0

Где вы прочитали, это может открыть вопрос? Хотите добавить ссылку на нее? – Kukeltje

+0

Большое спасибо @Gonza. Это помогло решить мою проблему. – Antoniomonteno