处理链接操作后显示对话框

时间:2011-09-16 15:29:50

标签: jsf primefaces

我有一个主要页面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>

当我点击过期链接时,它不会打开对话框页面。 请告诉我.... :(

2 个答案:

答案 0 :(得分: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方法时,您会注意到此代码执行更新,然后调用该方法。

答案 1 :(得分: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>

@ Daniel ..使用按钮工作正常,也可以点击此链接调用弹出窗口。但我们可以通过此链接传递值。当我们尝试使用FaceContext检索certHoldertId varible的值时,它给出null值。我认为它返回false值。

我们如何通过此链接发送这些值?