2011-09-16 25 views
2

我有一個primeface頁面certHollderList.xhtml: 在這個頁面我有一個到期的鏈接。並點擊一個動作被激發,並在處理完動作後,我想在同一頁面打開一個對話框。處理鏈接動作後顯示對話框

code 1:Expire Link:: 
    <h:commandLink id="expire" value="#{label.expire}" action="expire" immediate="true" oncomplete="dlg3.show()" 
              update="dialogPanel"> 

code 2 :: In the same page i added one outputpanel having a dialog box. 

                            <h:form> 
      <p:outputPanel id="dialogPanel" rendered="#  {certHolderSearchHandler.openDialog eq 'Success'}"> 
      <p:dialog header="Expire Holder Information" widgetVar="dlg3" 
       showEffect="bounce" hideEffect="explode" appendToBody="true"> 
       <p:outputPanel id="dialogPanel1" 
        rendered="#{certHolderSearchHandler.openDialog eq 'Success'}"> 
        <h:panelGrid columns="2"> 
         <h:outputText value="Do you want to continue?" /> 
         <p:spacer width="30" height="10" /> 
         <h:outputText /> 
         <p:spacer width="30" height="10" /> 
        </h:panelGrid> 
        <div align="left"><p:commandButton immediate="true" 
         value="Yes" action="continue" /> <p:spacer width="25" height="5" /> 
        <p:commandButton value="No" action="cancel" /></div> 
       </p:outputPanel> 
      </p:dialog>  
     </p:outputPanel> 
    </h:form> 

而當我點擊過期鏈接時,它不會打開對話框頁面。 請告訴我.... :(

回答

1

嘗試使用Primefaces模型實際更新:

//JSF 
<h:form id="someForm"> 
    <p:commandLink 
     id = "expire" 
     value="#{label.expire}" 
     actionListener="#{myBean.doSomething}" 
     oncomplete="dialog.show()" 
     update="dialogForm:dialogPanel" 
    /> 
    ... 

<h:form id="dialogForm"> 
    <p:dialog id="dialog"..... /> 
</h:form> 

//MyBean... 
public void doSomething(ActionEvent evt) 
{ 
    //Logic 
} 

什麼你缺少的是你沒有使用Primefaces Ajax引擎有一些在primefaces.org和論壇上的好教程是非常有幫助的,另一件事你應該知道的是一個動作可能不是處理顯示對話框的最佳方式,你無法使用ActionListener做什麼,它會給你一個很好的在頁面上的控制級別,然後你可以使用這個動作,當你真的需要拋出一些東西來進行導航時

這裏是上述(Primefaces 2.2.1)的測試工作示例

//Bean 
@ViewScoped 
@ManagedBean(name = "demoBean") 
public class DemoBean 
{ 
    private String hello = "Hello World"; 
    private String notSet = "not set"; 

    public void doAction(ActionEvent evt) 
    { 
     notSet = hello; 
    } 

    /** 
    * @return the hello 
    */ 
    public String getHello() 
    { 
     return hello; 
    } 

    /** 
    * @return the notSet 
    */ 
    public String getNotSet() 
    { 
     return notSet; 
    } 

    /** 
    * @param hello 
    *   the hello to set 
    */ 
    public void setHello(String hello) 
    { 
     this.hello = hello; 
    } 

    /** 
    * @param notSet 
    *   the notSet to set 
    */ 
    public void setNotSet(String notSet) 
    { 
     this.notSet = notSet; 
    } 
} 

JSF演示文件如下:

<?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"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:p="http://primefaces.prime.com.tr/ui"> 


<h:head> 
</h:head> 

<h:body class="center" style="zIndex:-3"> 
    <h:form id="commands"> 
     <p:inputText value="#{demoBean.hello}" /> 
     <p:commandButton 
      value="Open Dialog" 
      actionListener="#{demoBean.doAction}" 
      update="dialog" 
      oncomplete="dialogWidget.show()" 
     /> 
    </h:form> 

    <p:dialog widgetVar="dialogWidget"> 
     <h:form id="dialog"> 
      <p:panel> 
       <h3>Dialog</h3> 
       <p> 
        <h:outputText value="Copied: #{demoBean.notSet}"/> 
       </p> 
      </p:panel> 
     </h:form>  
    </p:dialog> 
</h:body>  

需要提防在Primefaces是事情它沒有使用內置的AJAX實現(它是兼容的,但可以有「雙倍」更新,因此事情不能正確呈現)。因此,當您使用widgetVar時,您直接從Javascript調用show方法,您會注意到此代碼執行更新,然後調用該方法。

+0

我測試了它,它沒有調用彈出:( – Vikas

+0

@BalauC ....請看看這個問題....我是新面孔... – Vikas

+0

@Vikas我已經更新了這一秒,並且記住「update」是Primefaces API的一部分,它不是綁定到(使用p:commandLink) –

0
<p:commandLink id="expire" value="#{label.expire}" onclick="dlg3.show()"> 
           <f:param name="certHoldertId" value="#{certHolder.accountOwner.itemIdInfo.insurerId}" /> 
           <f:param name="accNumberId" value="#{certHolder.accountNumberId}"/> 
          </p:commandLink> 

@做工精細用按鈕,也可以調用這個link.But我們能夠用這個鏈接值傳遞的點擊彈出Daniel..Its。當我們嘗試使用FaceContext檢索certHoldertId變量的值時,它給出null值。我認爲它返回false值。

我們該如何發送這些值與此鏈接?

+1

您仍然需要通過面上下文以某種方式傳遞一個值 - 上面的代碼將具有參數,但是如果您想要將它們拉下來,則需要獲取in從某處形成。這或者意味着在對話框中刷新包含參數的表單 - 或者您可以使用屬性並在服務器端處理它。我總是喜歡服務器端解決方案,因爲它更容易調試(使用動作監聽器)。因爲您使用的是AJAX,所以URL不會更新(使URL上的查詢爲空)。在這種情況下嘗試使用操作事件,或者使用RequestScoped變量。 –