Попробуйте использовать модель 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 Demo fileследующим образом:
<?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, вы напрямую вызываете метод show из Javascript, вы заметите, что этот код выполняет обновление, а затем вызывает метод.