JSF не может установить динамический идентификатор для компонента ввода - PullRequest
1 голос
/ 06 сентября 2011

моя форма выглядит так:

enter image description here

Когда пользователь нажимает «+ Добавить», появляется новый ввод расстояния:

enter image description here

Пользователь может повторять эту операцию столько раз, сколько необходимо, но все расстояния должны быть заполнены, и отдельные сообщения должны быть предоставлены для пропущенных данных:

enter image description here

Так что я пытаюсь установить динамические идентификаторы для входов расстояния. Однако, когда я пытаюсь передать динамические значения, все терпит неудачу. до сих пор я пробовал два разных метода:

  • с использованием связывания HtmlDataTable rowIndex <- оно всегда показывает -1 </li>
  • установка идентификатора в качестве атрибута класса Distance <- ужасное исключение </li>

вот мой код:

Фасоль:

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 Ответ

3 голосов
/ 06 сентября 2011

Мне нужно, чтобы я мог показывать отдельные «требуемые» сообщения. Есть идеи?

Для этого вам не нужно возиться с идентификаторами. 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>

Щелкните правой кнопкой мыши страницу в браузере и выберите Просмотр источника , чтобы увидеть ее самостоятельно.

Любая ошибка проверки будет отображаться в той же строке, что и входные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...