繁体   English   中英

如何将JSF组件绑定到支持bean属性

[英]How to bind JSF component to backing bean property

我有一个绑定p:commandButton到支持bean中的属性的问题。 我试图简化我的代码以显示一般的想法。

ExampleBean是一个辅助bean

public class ExampleBean {

    public String title;        
    List<ExampleWrapper> list;

    // Getters and setters

}

ExampleWrapper是一个POJO

public class Wrapper {

    public String name;
    public String description;

    public CommandButton button;

    // Listener which changes button state

    // Getters and setters
}

index.xhtml是一个主页面:

<h:form>
    <h:outputText value="Title" />
    <p:inpurText value="#{exampleBean.title}"

    <ui:include src="list.xhtml">
        <ui:param name="bean" value="#{exampleBean}">
    </ui:include>
</h:form>

list.xhtml是一个我想在几个地方重用的片段:

<ui:composition ...>
    <ui:repeat id="list" var="exampleWrapper" value="#{bean.list}">
        <h:outputText value="#{exampleWrapper.name}"/>
        <h:outputTextarea value="#{exampleWrapper.description}"/>
        <p:commandButton id="button" binding="#{exampleWrapper.button}" 
            value="Button" />
</ui:composition>

所以,我得到异常:javax.el.PropertyNotFoundException:/list.xhtml ... binding =“#{exampleWrapper.button}”:目标无法访问,标识符'exampleWrapper'解析为null

没有binding属性一切正常,显示正常

你能解释一下为什么以及如何将按钮绑定到这个POJO属性? 任何帮助将不胜感激

我正在使用带有Primefaces 3.0.1的JSF 2.0.2

在视图构建期间解析JSF UI组件的binding (和id )属性。 在视图构建期间, #{exampleWrapper}实例不可用。 视图构建时间是将XHTML文件解析为JSF组件树的那一刻。 #{exampleWrapper}仅在视图渲染时可用。 视图呈现时间是JSF组件树生成HTML输出的时刻。

基本上,组件树中只有一个 <p:commandButton> ,它生成的HTML输出是<ui:repeat>迭代次数的倍数。 您需要将其绑定到#{bean} ,或者使用JSTL <c:forEach>而不是<ui:repeat> JSTL标记在视图构建期间运行, <c:forEach>将生成物理上多个JSF UI组件。 但是,在JSF 2.x中,通常不需要将组件绑定到支持bean。 无论您认为这是解决方案的功能要求是什么,它都可以以更好的方式解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM