2012-09-27 53 views
2

我試圖防止用戶在我的應用程序中單擊時刷新頁面。我試過,但它不工作:如何防止頁面刷新點擊<h:commandLInk>

更新時間:

<h:dataTable value="#{person.IssueList}" var="p" > 
    <h:column style="width: 20px"> 
     <f:facet name="header">Issue</f:facet> 
     <h:commandLink value="#{p.IssueDesc}"/> 
    </h:column> 

    <h:column style="width: 20px"> 
     <f:facet name="header">Reporting Date</f:facet> 
     <p:calendar value="#{p.issuerepDt}" rendered="#{p.editable}"     id="CalendarId"/>     
     <h:outputText value="#{p.issuerepDt}" rendered="#{not p.editable}" /> 
    </h:column> 

    <h:column> 
      <f:facet name="header">Action</f:facet> 
     <h:commandLink value="Edit" action="#{person.editAction(p)}"> 
      <f:ajax execute="@form" render="@none" />   
     </h:commandLink>  

      </h:column> 
    </h:dataTable> 

Java代碼:

public void editAction(PersonIssues pIssues) { 
    pIssues.setEditable(true); 
} 

我使用的editing jsf datatable概念從MKyong.I

+0

你確定它的'Person.'而不是'person.'另外,儘量使你的'edtiAction'方法的一個空白...... – Daniel

+0

感謝注意到了typo..you只是想讓我改變操作返回類型將無效,並對上面發佈的代碼進行任何更改? – mdp

+0

是的,嘗試'public void edtiAction(){};'否則它將是一個隱式導航 – Daniel

回答

1

我會嘗試使用f:ajaxlistener而不是01的:

<h:commandLink value="Edit"> 
    <f:ajax listener="#{person.editAction(p)}" execute="@form" render="dataTableId calendarId" />   
</h:commandLink> 

此外,要注意你想要的AJAX後呈現什麼。

+0

我試過這個,但它不起作用。 – mdp

+0

什麼不行?問題是什麼?會發生什麼,你會發生什麼?你確定渲染應該是@none嗎?再次呈現您的數據表。我想你想看到一些變化。它是什麼?將其ID放在渲染選項而不是@none。 – falsarella

+0

是的,我考慮過BalusC的評論來更新我的文章。這就是爲什麼我告訴你要將dataTable id放在render屬性中而不是@none。但也許我的解決方案還不夠。也許你應該將所有元素都改爲primefaces的元素,這樣他們就可以很好地交談,就像Catfish的答案一樣。 – falsarella

2

因爲我看到您使用日曆組件的primefaces,所以您可能還想使用primefaces命令按鈕和數據表。 primefaces組件在一起玩起來相當不錯。

從我下面的例子中,你可以看到,我給你的數據表一個ID和commandLink,我已經添加了一個更新屬性來更新數據表後,行動被稱爲。默認情況下,primefaces的ajax屬性在commandLinks上設置爲true。

<p:dataTable id="myTable" value="#{person.IssueList}" var="p" > 
    <p:column style="width: 20px" headerText="Issue"> 
     <p:commandLink value="#{p.IssueDesc}"/> 
    </p:column> 

    <p:column style="width: 20px" headerText="Reporting Date"> 
     <p:calendar value="#{p.issuerepDt}" rendered="#{p.editable}"     id="CalendarId"/>     
     <h:outputText value="#{p.issuerepDt}" rendered="#{not p.editable}" /> 
    </p:column> 

    <p:column headerText="Action"> 
     <p:commandLink value="Edit" action="#{person.editAction(p)}" update="myTable"/> 
    </p:column> 
</p:dataTable>