example jsf input onchange

example - Acción JSF desde onChange



selectonemenu actionlistener (1)

Estoy tratando de configurar una tabla de datos con JSF que tenga casillas para el total de filas que sumará el total de la fila en Cambio de cualquier casilla de la fila. la fila se ve así:

<tr id="input_row_1"> <td id="mondayInput1"> <h:inputText id="monday1" size="4" value="#{timesheet.monday1}" required="false" /> <!-- <input name="monday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="tuesdayInput1"> <h:inputText id="tuesday1" size="4" value="#{timesheet.tuesday1}" required="false" /> <!--<input name="tuesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="wednesdayInput1"> <h:inputText id="wednesday1" size="4" value="#{timesheet.wednesday1}" required="false" /> <!--<input name="wednesday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="thursdayInput1"> <h:inputText id="thursday1" size="4" value="#{timesheet.thursday1}" required="false" /> <!--<input name="thursday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="fridayInput1"> <h:inputText id="friday1" size="4" value="#{timesheet.friday1}" required="false" /> <!--<input name="friday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="saturdayInput1"> <h:inputText id="saturday1" size="4" value="#{timesheet.saturday1}" required="false" /> <!--<input name="saturday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td id="sundayInput1"> <h:inputText id="sunday1" size="4" value="#{timesheet.sunday1}" required="false" /> <!--<input name="sunday1" class="smallInput" type="number" size="2" maxlength="4" min="0"/> --> </td> <td> <h:inputText id="total1" size="4" value="#{timesheet.total1}" required="false" /> <!-- <input name="total1" id="total1" type="text" size="5" readonly="readonly" /> --> </td>

así que primero intenté agregar onChange="#{timesheet.setTotal1}" a las entradas del día, pero el evento onChange llama a javascript, no a código java / JSF. ¿Alguien puede ayudar a obtener el total para actualizar?

EDITAR: He aceptado la respuesta de BalusC pero también necesito incluir el atributo de event en la etiqueta <f:ajax> para que funcione, como lo hizo

<h:inputText id="friday1" size="4" value="#{timesheet.friday1}" maxlength="4" required="false" > <f:ajax event="change" render="total1" listener="#{timesheet.updateTotal1}" /> </h:inputText>


De hecho, el atributo onchange simplemente se trata como un atributo HTML de texto sin formato que debería representar una función de controlador onchange JavaScript. Esto no es diferente del HTML "simple". Cualquier expresión EL en ese atributo solo será tratada como expresiones de valor. Ver también la documentación de la etiqueta .

Según su historial de preguntas, está utilizando JSF 2.x (mencione explícitamente la versión / impl de JSF exacta en las preguntas futuras ya que muchas cosas se hacen de forma diferente en JSF 2.x en comparación con JSF 1.x). Entonces, simplemente usando la nueva etiqueta JSF 2.0 <f:ajax> debería hacerlo.

<h:inputText ...> <f:ajax listener="#{timesheet.changeTotal1}" render="idOfTotalComponent" /> </h:inputText> ... <h:outputText id="idOfTotalComponent" value="#{timesheet.total1}" />

con

public void changeTotal1(AjaxBehaviorEvent event) { total1 = ...; }