Доступ к динамическим компонентам пользовательского интерфейса в управляемом компоненте JSF 2

У меня есть 6 столбцов в моей таблице данных, и меня особенно интересуют два InputText: Я должен предотвратить возможность записи обоих inputText в одну и ту же строку. Либо записывается в одно, либо в другое, но не в оба. Решение, которое я нашел, состоит в том, чтобы внедрить валидатор и просмотреть таблицу данных или специально посетить дерево компонентов с UIComponent#visitTree() в UIData, как это предлагает BalusC здесь. Мой вопрос: как узнать, в какой строке я нахожусь? Как я могу получить значение InputText, указывающее строку? Моя цель - проверить два InputText относительно другого. Когда у одного есть значение, другое должно быть нулевым. И взаимно.

Если у вас есть другое решение, мне интересно.

Спасибо за вашу помощь.


person It.Next    schedule 26.05.2014    source источник
comment
Вам будет передан экземпляр UIComponent в качестве аргумента метода проверки в вашем валидаторе. Вызовите component.getClientId(), чтобы получить полный идентификатор текущего проверяемого компонента. Если вы находитесь в первой строке в datatable, тогда идентификатор текстового поля будет formId:datatableId:rowIndex:textboxId. Если вы находитесь в первой строке, тогда rowIndex будет равен 0. Надеюсь, это поможет.   -  person Srikanth Ganji    schedule 26.05.2014
comment
Спасибо за ваше возвращение. Не думал, что ответ будет таким простым. Мои попытки восстановления dataTableSaisiePiece не работают с UIData datatableDEC = (UIData) context.getViewRoot()findComponent("principalTabViewDEC:0:tabviewDEC:0:formTabGeneral:dataTableSaisiePiece"); Мой datatableDEC всегда равен нулю. Есть конечно информация, которая до сих пор избегает меня. Но я продолжаю искать. Спасибо за помощь.   -  person It.Next    schedule 27.05.2014
comment
Я считаю, что ваш идентификатор с данными может быть неправильным. Получите точный идентификатор datatable, используя источник просмотра страницы   -  person Srikanth Ganji    schedule 27.05.2014
comment
Это возможно. Я использую два динамических TabView, это не помогает. Кроме того, поскольку класс TabView является UIData, возможно, мне следует посетить дерево компонентов с помощью method UIComponent#visitTree().   -  person It.Next    schedule 27.05.2014