JSF无法为输入组件设置动态ID

时间:2011-09-05 21:39:21

标签: jsf

我的表单如下:

enter image description here

当用户点击“+添加”时,会显示新的距离输入:

enter image description here

用户可以根据需要多次重复此操作,但必须填写所有距离,并且必须为缺少的数据提供单独的消息:

enter image description here

所以我试图为距离输入建立动态id。但是,当我尝试传递动态值时,一切都失败了。到目前为止,我尝试了两种不同的技术:

  • 使用绑定HtmlDataTable的rowIndex< - 它总是显示-1
  • 将id设置为Distance类的属性< - 丑陋异常

这是我的代码:

支持bean:

private List<Distance> distances;
private HtmlDataTable distancesUI;

public void addDistance(ActionEvent e) {
    distances.add(new Distance());
}

JSPX:

<h:dataTable
binding="#{Bean.distancesUI}"   
value="#{Bean.distances}"
var="distance"> 
    <h:column> 
        <h:inputText 
        id ="distance_#{Bean.distancesUI.rowIndex}" // <- always renders "distance_-1"
        value="#{distance.value}" />
    </h:column>
</h:dataTable>

我需要能够显示单独的“必需”消息。有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:3)

  

我需要能够显示单独的“必需”消息。有什么想法吗?

为此,您不需要使用ID。 JSF会为你做这件事。只是做

<h:dataTable id="table" value="#{bean.distances}" var="distance"> 
    <h:column> 
        <h:inputText id="distance" value="#{distance.value}" required="true" />
        <h:message for="distance" />
    </h:column>
</h:dataTable>

这将最终生成HTML,如下所示:

<table id="form:table">
    <tr><td><input id="form:table:0:distance" /></td></tr>
    <tr><td><input id="form:table:1:distance" /></td></tr>
    <tr><td><input id="form:table:2:distance" /></td></tr>
    ...
</table>

在浏览器中右键单击该页面,然后选择查看源以自行查看。

任何验证错误都将显示在与输入相同的行中。