2017-02-13 4 views
0

Primefaces6.0のモーダル(ダイアログボックス)に問題があります。私は複数の選択モードで簡単なdatatableを持っています。 Datatableには入力テキストコンポーネントもあり、rowselectイベントでは、行に関する詳細情報を表示するダイアログボックスが表示されます。ここで問題となるのは、データテーブル行を最初にクリックするとダイアログボックスが表示されます(つまり、動作するはずです)。ダイアログを閉じて、それぞれの入力テキストコンポーネントの入力を開始し、スペースバーを押すと、ダイアログボックスが表示されます(これは実際のバグです)。 この問題はPrimefaces6.0にのみ存在し、Primefaces5.3リリースでは同じコードが正常に動作しています。 Primefaces6.0では、データテーブルやその他のコンポーネントの応答/サイズ変更が可能なので、私はそれに固執する必要があり、他のコンポーネントと一緒に行くことはできません。私の問題を解決するのを手伝ってください。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)); 
    } 
} 

Beanクラス:

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. イベント伝播(親停止)

    $(document).on("ready", function(){ 
    
        $(".in").keydown(function(e){ 
         e.stopPropagation(); 
        }); 
    }); 
    
  2. を停止するためのクラス

  3. <p:inputText styleClass="in" value="#{mbEmployee.feedback}" /> 
    
    のinputText

    に "中" のような使用はJQueryを追加します。
  4. このサンプルをチェックする Easy way

注:あなたのinputTextタグからIDが削除されました。 "mbEmployee.feedBack"の値がすべてのinputTextタグに対して単一であることを忘れないでください。

私はこれが役に立ちます。よろしく!

+0

どこから問題を開くことができるのですか?それにリンクを追加するには気をつけますか? – Kukeltje

+0

ありがとう@Gonza。これは私の問題を解決するのに役立ちました。 – Antoniomonteno

関連する問題