2015-03-31 54 views
1

我遇到了選擇primefaces數據表的問題。當我選擇任何記錄時,我的setter不會調用。我發現了幾個解決方案像change templatechange to ViewSCope我改變了一切,但還是簡化版,工作 template.xhtml選擇primefaces數據表無法正常工作

<!DOCTYPE html> 
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:c="http://java.sun.com/jsf/composite/custom" 
xmlns:p="http://primefaces.org/ui" 
xmlns:ui="http://java.sun.com/jsf/facelets"> 
<h:head> 
<title><ui:insert name="title">Default title</ui:insert></title> 
<f:facet name="first"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1" /> 
    <title>Social Test</title> 
</f:facet> 
<f:facet name="middle"> 
    <h:outputStylesheet name="bootstrap/css/bootstrap.css" /> 
    <h:outputStylesheet name="css/style.css" /> 
    <h:outputStylesheet name="bootstrap/css/bootstrap-social.css" /> 
    <script 
     src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" /> 
    <h:outputScript name="bootstrap/js/bootstrap.js" /> 
    <!-- h:outputScript name="js/script.js" /--> 
</f:facet> 
<f:facet name="last"> 
</f:facet> 
</h:head> 
<h:body> 
    <div id="header"></div> 
    <div id="menu"></div> 
    <div id="content"> 
     <ui:insert name="content"></ui:insert> 
    </div> 
    <div id="footer"></div> 
</h:body> 
</html> 

ticketEdit.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition template="/template/template.xhtml" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:c="http://java.sun.com/jsf/composite/custom" 
xmlns:p="http://primefaces.org/ui"> 
<ui:define name="content"> 
      <h2 class="form-signin-heading">#{labRes.add_ticket}</h2> 
      <h:form id="form"> 
       <p:accordionPanel> 
        <p:tab title="#{labRes.train_details}"> 
         <h:panelGrid columns="2" cellpadding="10"> 
          <c:autoComplete 
           completeMethod="#{ticketBean.trainAutoCompleteBean.complete}" 
           minQueryLength="2" 
           converter="#{ticketBean.trainAutoCompleteBean.converter}" 
           nameLable="#{labRes.train_number}" 
           autoValue="#{ticketBean.selectedTrain}" forceSelection="true" 
           queryDelay="500" effect="fade" cid="ticketAuto" listener="null" 
           labelStyleClass="labelPaddingParameter" ajax="true" 
           update="@form" /> 
          <c:inputText id="nr" cid="cnr" 
           nameLable="#{labRes.train_number}" disabled="true" 
           inputValue="#{ticketBean.selectedTrain.name}" 
           labelStyleClass="labelPaddingParameter" /> 
         </h:panelGrid> 
        </p:tab> 
        <p:tab title="#{labRes.train_details}"> 
         <h:panelGrid columns="1" cellpadding="10" id="pgTrainDetails"> 
          <c:calendar pattern="MM-dd-yyyy" value="#{ticketBean.day}" 
           isListener="true" update=":form" ajax="true" 
           nameLable="#{labRes.departure_date}" cid="depDat" 
           listener="#{ticketBean.onDateSelect}" /> 
          <p:dataTable var="schedule" value="#{ticketBean.tripSchedules}" 
           selectionMode="single" 
           selection="#{ticketBean.selectedSchedule}" 
           rowKey="#{schedule.id}" styleClass="pickListWidth" 
           paginator="true" rows="10" 
           paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
           rowsPerPageTemplate="5" id="scheduleTable"> 
           <f:facet name="header"> 
            <c:calendar pattern="MM-dd-yyyy" value="#{ticketBean.day}" 
             isListener="true" update=":form" ajax="true" 
             nameLable="#{labRes.departure_date}" cid="depDat" 
             listener="#{ticketBean.onDateSelect}" /> 
           </f:facet> 
           <p:column headerText="#{menRes.id}" sortBy="#{schedule.id}" 
            style=" text-align:center"> 
            <h:outputText value="#{schedule.id}" /> 
           </p:column> 
           <p:column headerText="#{labRes.departure_time}" 
            sortBy="#{schedule.departure}" style="text-align:center"> 
            <h:outputText value="#{schedule.departure}" /> 
           </p:column> 

          </p:dataTable> 
         </h:panelGrid> 
        </p:tab> 
        <p:tab title="#{labRes.ticket_details}"> 
         <h:panelGrid columns="2" cellpadding="10"> 
         </h:panelGrid> 
        </p:tab> 
       </p:accordionPanel> 
      </h:form> 
</ui:define> 

我的豆(我使用Spring),但我必須使用@ViewScope,因爲彈簧不包含@Scope('view')

// the same annotations in AbstractBean 

@Component 
@ViewScope //faces bean package 
public class TicketBean extends AbstractBean { 


... code ... 

public TripSchedule getSelectedSchedule() { 
return selectedSchedule; 
} 

public void setSelectedSchedule(TripSchedule selectedSchedule) { 
this.selectedSchedule = selectedSchedule; 
} 

感謝您的幫助!

+0

確定@Component可與@Viewscoped?它可能僅僅是它不起作用,並且默認的作用域開始了。然後會有一個不同的bean實例,並且調用將不會成功。請參閱http://stackoverflow.com/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invoked – Kukeltje 2015-03-31 22:40:52

+0

也不要手動包括jquery.js – Kukeltje 2015-03-31 22:41:54

+0

是'@ component'與'@ ViewScope'。我刪除了我的manully include .js和.css。我可以,因爲我使用'​​primefaces.THEME 引導'在我的web.xml,但選擇仍然沒有工作 – luprogrammer 2015-04-01 07:13:39

回答

2

我想你需要一些Ajax添加到數據表:

<p:ajax event="rowSelect"/> 
<p:ajax event="rowUnselect"/> 
+0

PrimeFaces DataTable中可以沒有Ajax工作 – Kukeltje 2015-03-31 22:38:30

+0

對不起,downvote是意外刪除這些。無法刪除它......不知道爲什麼 – Kukeltje 2015-03-31 23:22:00

+0

但是不是必須提交表單嗎? – 2015-04-01 05:59:23