【问题标题】:How do I generate a number of text boxes depending on a stored value?如何根据存储的值生成多个文本框?
【发布时间】:2011-04-05 20:09:44
【问题描述】:

我需要根据支持 bean 中的值创建多个输入框。如果产品允许 5 个用户,我需要 5 组输入字段。

当我加载页面时,输入框的数量是已知的。

有什么想法吗? 这个问题让我困惑了一段时间。

【问题讨论】:

  • 嗯,编辑似乎淘汰了 cmets。对不起...
  • 我自己删除了。我检查了您的问题历史并确认您在 Facelets 上使用 JSF 2.0,然后我发布了答案:)

标签: jsf jsf-2 facelets


【解决方案1】:

让bean根据数字准备一个List<Item>

@ManagedBean
@ViewScoped
public class Bean {

    private int count;
    private List<Item> items;

    public Bean() {
        count = 5;
        items = new ArrayList<Item>();

        for (int i = 0; i < count; i++) {
            items.add(new Item());
        }
    }

    public void submit() {
        System.out.println(items);
    }

    public List<Item> getItems() {
        return items;
    }

}

Item 只是一个带有 value 属性的简单 Javabean。

让视图使用&lt;ui:repeat&gt;&lt;h:dataTable&gt; 对其进行迭代。

<h:form>
    <ui:repeat value="#{bean.items}" var="item">
        <h:inputText value="#{item.value}" /><br />
    </ui:repeat>

    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>

【讨论】:

  • 谢谢,我明天试试。 Glassfish 刚刚坏掉了,我认为这是我应该崩溃的信号。
  • 我正在使用相同的方法,但该值在 submit() 中始终为 null。为什么会这样?
  • @abhinay:那你没有使用完全相同的方法。
【解决方案2】:

在纯 Jsf 中很难做到。您可以基于 Javascript 库和 Ajax 编写自己的组件。 (ajax 是可选的)或者如果您可以使用 JSF 的变体,例如 IceFaces 或 Rich Faces,那么框架将为您完成大部分繁重的工作。

例如,对于 Icefaces,它可以使用 simple panel series 来实现。

【讨论】:

  • 谢谢,我去看看。我已经编辑了原件,但我忘了提到我事先知道要加载多少组件。我不确定这是否会有所不同。
  • 是的,这确实简化了您的问题。我可以想到两个选项。您可以使用 h:dataTable,它应该是更简单的解决方案。如果您使用 facelets,也可以使用 ui:repeater 标签。您需要的是一个中继器组件。唯一的问题是您应该能够关联正确的回调控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多