2011-09-16 18 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变量。 –