首先,对不起我的英语。我是巴西人,我有一个问题。当我使用组件全局消息时,我有一个复制验证消息的panelGroup。看:
那是我的页面xhtml:
<?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://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form>
Hello from Facelets
<h:panelGroup binding="#{testeMB.panel}" >
<p:inputText id="field_id" value="#{testeMB.field}"
required="true" />
<p:commandButton id="button_id" value="Submeter"
action="#{testeMB.submit}" ajax="false" />
</h:panelGroup>
</h:form>
</h:body>
那是我的ManagedBean:
@ManagedBean
@ViewScoped
public class TesteMB implements Serializable {
public static final long serialVersionID = 1L;
private HtmlPanelGroup panel;
private String field;
public TesteMB() {
}
public void submit() {
System.out.println("Form submited!!!");
}
// gets and sets
}
最后,它会两次打印相同的消息。看:
在RENDER_RESPONSE的任何循环中查看JSF的生命周期,共有4个组件。这里有没有人经历过这个?
已确定此问题从版本2.1.22开始。我不知道为什么。 感谢所有尝试过的人。
答案 0 :(得分:1)
组件实例是请求范围的。您不应该将它们绑定到更广泛范围内的bean。如果需要,将它们绑定到请求范围的bean并在其中注入视图范围的bean。
一般来说,当使用像Facelets这样强大的视图技术时,将JSF组件绑定到bean属性是一个巨大的代码味道。无论你想通过将组件绑定到bean属性来解决什么功能需求,这种方式很可能只需要在不使用绑定的情况下解决。