I have an Employee object I am showing in inputtext. For example, the firstname of the employee is shown in an inputtext. When the value of this firstname changes it calls a method. Before this is done I want to call a method which saves the ID of the employee in the managedbean so I know which employee needs to be changed. How do I do this, I got this so far:
<h:outputText value="First name:"/>
<p:inplace id="firstname" editor="true">
<p:ajax event="save" onsuccess="#{employeeController.saveName()}"/>
<p:inputText id="firstName" value="#{emp.firstName}"
required="true" label="text"
valueChangeListener="#{employeeController.firstNameChanged}">
<p:ajax event="valueChange" listener="#{employeeController.onValueChangedStart}"/>
</p:inputText>
</p:inplace>
I guess I should pass the ID with the onValueChangedStart or firstNameChanged method. How do I do this? Or is there a better way to do this? There is a getter for the emp. So #{emp}.id to get it.
try
Assuming that you're indeed inside a repeating component where
#{emp}
is been exposed by itsvar
attribute, you could just grab it from the EL scope inside the value change listener as follows:Alternatively, if you wrap the
value
of the<h:dataTable>
inside aDataModel<Employee>
, then you can obtain the current row as follows:Unrelated to the concrete problem, it's unnecessary to have two listener methods for the value change. Note that the
valueChangeListener
gives you the opportunity to get both the old and new value by the event and thep:ajax listener
not, the new value is already been set as model value at that point. If you need both the old and new value, remove thelistener
attribute of<p:ajax>
. Theevent="valueChange"
is by the way the default event already, so just remove it as well.Using primefaces ajax you can retrieve the value of an input in java doing:
Instead of casting to employee you cast to String since your value is a String, or use the employee Object and use a Converter or its toString() method.