如何在 JSF 中动态添加 <h:inputtext>? [复制]
Posted
技术标签:
【中文标题】如何在 JSF 中动态添加 <h:inputtext>? [复制]【英文标题】:How to add <h:inputtext> dynamically in JSF? [duplicate] 【发布时间】:2011-04-11 01:23:45 【问题描述】:我的应用程序我想为 ex 添加更多动态:我的应用程序要求输入城市并提供一个但用户想要添加更多城市,我需要更动态地为他提供,那么如何在 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);
// 设置/获取
【讨论】:
以上是关于如何在 JSF 中动态添加 <h:inputtext>? [复制]的主要内容,如果未能解决你的问题,请参考以下文章