【问题标题】:How to add <h:inputtext> dynamically in JSF? [duplicate]如何在 JSF 中动态添加 <h:inputtext>? [复制]
【发布时间】:2011-04-11 01:23:45
【问题描述】:

我的应用程序我想为 ex 添加更多动态:我的应用程序要求输入城市并提供一个但用户想要添加更多城市,我需要更动态地为他提供,那么如何在 JSF 中做到这一点?

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    使用表 (h:dataTable)。

    总体思路:您有一个字符串列表(每个都代表城市名称)。开始时您的列表中只有 1 个项目 - 1 个空字符串。

    如果您想再添加一个城市,请执行一些操作(例如按“添加更多城市”按钮),此操作会在列表中再添加一个空字符串,并且您的表格应该重新呈现(通过 ajax 或整体页面重新加载)。

    之后,您将在页面上获得 2 个输入字段,每个字段都绑定到自己的字符串值。然后用户输入城市名称,按下“处理”按钮,它会调用一些操作,您可以在其中处理已经包含 2 个 非空 字符串的列表。

    <h:dataTable value="#{dataTableBean.cities}" var="city">
        <h:column>
        <f:facet name="header" >
            <h:outputText value="City name"/>
        </f:facet>    
        <h:inputText value="#{city}"/>
        </h:column>
    </h:dataTable>
    
    <h:commandButton value="Add one more city" action="#{dataTableBean.enlargeList}"/>
    <h:commandButton value="Submit" action="#{dataTableBean.processList}"/>
    

    在 bean 中:

    private List<String> cities = new LinkedList<String>();
    
    //getter and setter
    ...
    
    public String enlargeList () {
        cities.add ("");
        return "refreshTable"; //the easiest way - just reload the page
    }
    

    【讨论】:

    • 这很可能是拥有动态结构的最简洁方式。
    • 需要注意的是 bean 需要在此处限定为视图 (JSF2) 或会话 (JSF1)。
    • 我采用了这种方法,但是当我提交在新输入中输入的值时,不会发送到支持 bean。有什么问题?
    • 这确实行不通。 String class is immutable。改为通过索引更好地访问值,或者仅使用完全值得的 javabean 作为实体。
    【解决方案2】:

    如果是关于有限数量的城市,除非需要,否则您可以使用渲染属性隐藏字段。

    【讨论】:

    • City只是一个例子,基本问题是我想动态添加组件怎么做?
    【解决方案3】:

    您可以使用组件并将其与支持 bean 中的 HtmlPanelGrid 绑定。然后您可以根据需要动态添加组件。这里我添加了 outputText。

    页面代码:

    <ice:panelGrid binding="#{backingBean.gridComponent}"/>
    

    支持豆:

    private HtmlPanelGrid gridComponent;
    
    public void someFunction(){
    
    HtmlOutputText outPutText = new HtmlOutputText();
    outPutText.setValue("Some Text");
    
    gridComponent.getChildren().add(outPutText);
    

    }

    // 设置/获取

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多