从支持 bean 访问 JSF 组件标记属性值

Posted

技术标签:

【中文标题】从支持 bean 访问 JSF 组件标记属性值【英文标题】:Accessing JSF components tag attribute values from a backing bean 【发布时间】:2012-06-19 03:42:03 【问题描述】:

我需要访问组件标签属性,例如:

<h:inputtext id="input_age"/>

来自支持 bean,例如:

public class UserInfo 
    String inputAgeId;
    public UserInfo() 
        inputAgeId =  /*code to access component tag attribute*/ .getStyleClass();
    

【问题讨论】:

【参考方案1】:
UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot();

然后您可以使用view.find("component_id") 来获取正确的组件。获得组件后,您可以使用getAttributes() 获取包含组件所有属性的Map&lt;String, Object&gt;

如果您总是访问相同的组件,您可以改为bind it to the backing bean。

【讨论】:

谢谢 Pablo,它很有帮助,参考也很棒。 这也很有帮助 (download.oracle.com/javaee/5/tutorial/doc/bnatg.html) 是所有封闭命名容器前缀的完整ID吗? 这对我不起作用。当我执行 getAttributes().get("class") 希望获得该标记的类属性时,我得到类似 "class javax.faces.component.html.HtmlForm" 的内容。此外,地图是一个非常特殊的结构,它隐藏了它的键,所以我什至不知道我可以尝试哪些其他键。 @GyroGearloose 我建议您使用一些代码示例创建一个新问题。

以上是关于从支持 bean 访问 JSF 组件标记属性值的主要内容,如果未能解决你的问题,请参考以下文章

JSF 复合组件支持 bean EL 表达式作为必需属性的默认值失败,方法未知

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

将数据从 Java/JSF2 bean 传递到 Javascript/jQuery 组件作为返回值的最佳方法

将支持 bean 操作传递给 Facelet 标记文件

在 JSF 中访问静态属性

有条件地在 JSF 组件标签中设置一个属性