jsf генерирует отдельные случайные идентификаторы для каждого входа
Идентификаторы не случайны; h: dataTable является NamingContainer и управляет его дочерними clientId s, чтобы они стали уникальными (требование спецификации HTML). JSF: работа с идентификаторами компонентов (id против clientId) .
Простой HTML-код, который вы добавили, будет трудно интегрировать со структурой JSF-модель-представление-презентатор. Было бы лучше придерживаться элементов управления JSF. Этот код показывает, как вы можете манипулировать значениями полей на стороне клиента, используя JavaScript и пользовательскую функцию TLD :
<h:dataTable value="#{rowDataBean.data}" var="row">
<h:column>
<f:facet name="header">
<h:outputText value="product" />
</f:facet>
<h:outputText value="#{row.name}" />
</h:column>
<h:column id="column2">
<f:facet name="header">
<h:outputText value="quantity" />
</f:facet>
<h:inputText id="quantityCount" value="#{row.quantity}" />
<h:commandButton value="+"
onclick="increment('#{id:clientId('quantityCount')}'); return false;" />
</h:column>
</h:dataTable>
Вызванный JavaScript:
function increment(id) {
//TODO: error handling
var textField = document.getElementById(id);
var value = textField.value;
value++;
textField.value = value;
}
Если вы используете Facelets вместо JSP, вам нужно определить функцию в библиотеке тегов Facelets .