【问题标题】:how to initialize jsf 2.0 textfield on runtime?如何在运行时初始化 jsf 2.0 文本字段?
【发布时间】:2012-06-08 21:40:06
【问题描述】:

我想在运行时初始化我的文本字段。例如,我有这样的primefaces inputtext:

<p:inputText value="#{myBean.value}" id="inputText" />

还有一个 bean 类:

@PostConstruct
public void onPageLoad() {
    ....
    ....
    inputText.setMaxlength(15);
    inputText.setStyle(".....");
}

jsf 2.0 可以做到这一点吗?

【问题讨论】:

    标签: jsf-2 primefaces runtime seam3


    【解决方案1】:

    您可以通过将组件绑定到 bean 来做到这一点:

    <p:inputText binding="#{bean.input}" ... />
    

    与

    private InputText input; // +getter+setter
    
    @PostConstruct
    public void init() {
        input = new InputText();
        input.setMaxlength(15);
        input.setStyle("background: pink;");
    }
    
    // ...
    

    但这不是推荐的方法。相反,您应该将各个属性绑定到 bean 属性。

    <p:inputText ... maxlength="#{bean.maxlength}" style="#{bean.style}" />
    

    与

    private Integer maxlength;
    private String style; 
    
    @PostConstruct
    public void init() {
        maxlength = 15;
        style = "background: pink;";
    }
    
    // ...
    

    更重要的是,如果您的应用程序设计得很好,那么您应该已经有一个这样的 bean 对象(为什么/如何在运行时指定它?)。将其设为托管 bean 的属性,以便您可以执行以下操作:

    <p:inputText ... maxlength="#{bean.attributes.maxlength}" style="#{bean.attributes.style}" />
    

    【讨论】:

    • 提前致谢。我想在 gridPane 中列出来自 db 的所有参数值。但是将在它自己的 UIComponent 中显示的值的数量。例如,这是我来自 db 的记录; 1)type=text,value="systemName",maxChar="10"(将显示在 inputText 中) 2)type=date,value="createdTime"(将显示在日历组件中) 3)type=number,value ="versionNumber"(只允许输入文本中的数字)如您所见,我的页面上会有不同类型的组件,而且我需要在运行时对其进行自定义。这是我的问题。
    • 参数值?你的意思是属性值,对吧?好吧,你可以继续绑定。另一种方法是创建自定义标记文件。
    • @BalusC:BalusC 每次都让我自己惊叹!你能在 The Complete Reference 旁边给我一些关于 JSF 的好书吗?尽管它很不错,但我必须承认它没有正确精简。
    【解决方案2】:

    为此,您可以使用以下代码从 jsf 框架中获取组件对象

    UIComponent componentObj = FacesContext.getCurrentInstance().getViewRoot().findComponent(id)
    

    然后您可以在标签组件类型中键入转换组件对象,就像您使用 inputText 一样

    HtmlInputText inputTextObj = (HtmlInputText) componentObj;
    

    和 HtmlInputText 类具有标签中所有可用属性的所有 getter setter 所以你可以设置像

    这样的值
    inputTextObj.setMaxlength(15);
    inputTextObj.setStyle(....);
    inputTextObj.setDisabled();
    inputTextObj.setReadonly();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-01
      • 2014-06-12
      • 2013-04-11
      • 2011-03-16
      • 2014-03-21
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多