【问题标题】:JSF panelGroup with attribute binding is duplicating the internal components具有属性绑定的 JSF panelGroup 正在复制内部组件
【发布时间】:2013-10-18 18:23:35
【问题描述】:

首先,对不起我的英语。我是巴西人,我有问题。当我使用组件全局消息时,我有一个 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

}

最后,它会打印两次相同的消息。看:

看JSF的生命周期在减去RENDER_RESPONSE的任何一个周期,有4个组件。这里有人经历过吗?

已确定此问题从 2.1.22 版本开始出现。我不知道为什么。 感谢所有尝试过的人。

【问题讨论】:

  • 当前页面是否包含其他表单或其他页面
  • 你的代码中&lt;h:messages /&gt;在哪里?
  • 为什么会有HtmlPanelGroup的绑定?是否要在运行时向面板组动态添加组件?
  • 不,@BholaVishwakarma,我没有其他表格或页面。仅此而已!
  • 你能用英语说出那个错误吗

标签: jsf primefaces jsf-2.2


【解决方案1】:

组件实例是请求范围的。您不应该将它们绑定到更广泛范围内的 bean。如果需要,将它们绑定到请求范围的 bean 并在其中注入视图范围的 bean。

一般来说,当使用像 Facelets 这样强大的视图技术时,将 JSF 组件绑定到 bean 属性是一种巨大的代码气味。无论您想通过这种方式将组件绑定到 bean 属性来解决什么功能需求,都无需使用绑定即可解决。

另见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-31
    • 2013-11-07
    • 2012-11-01
    • 2023-03-14
    • 2011-06-02
    • 2011-06-24
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多