【问题标题】:JSF unable to set dynamic id for input componentJSF 无法为输入组件设置动态 id
【发布时间】:2011-11-10 21:28:24
【问题描述】:

我的表单如下所示:

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

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

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

  • 使用绑定HtmlDataTable的rowIndex
  • 将 id 设置为距离类的属性

这是我的代码:

支持 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>

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

提前致谢

【问题讨论】:

    标签: jsf


    【解决方案1】:

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

    为此,您无需摆弄 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>
    

    在浏览器中右键单击页面并选择查看源代码自己查看。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多