我有一个主要页面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>
当我点击过期链接时,它不会打开对话框页面。 请告诉我.... :(
答案 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值。
我们如何通过此链接发送这些值?