Kla*_*aak 2 java xhtml jsf primefaces managed-bean
我有一个我在inputtext中显示的Employee对象.例如,员工的名字显示在inputtext中.当这个名字的值改变时,它调用一个方法.在此之前,我想调用一个方法,该方法将员工的ID保存在managedbean中,以便我知道哪个员工需要更改.我怎么做到这一点,到目前为止我得到了这个:
<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>
Run Code Online (Sandbox Code Playgroud)
我想我应该使用onValueChangedStart或firstNameChanged方法传递ID.我该怎么做呢?或者有更好的方法吗?emp有一个吸气剂.所以#{emp} .id得到它.
Bal*_*usC 11
假设您确实位于#{emp}其var属性公开的重复组件内,您可以从值更改侦听器中的EL范围中获取它,如下所示:
FacesContext context = FacesContext.getCurrentInstance();
Employee employee = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class);
Long id = employee.getId();
// ...
Run Code Online (Sandbox Code Playgroud)
另外,如果你包裹value的<h:dataTable>内部DataModel<Employee>,那么你就可以得到当前行如下:
Employee employee = model.getRowData();
Long id = employee.getId();
// ...
Run Code Online (Sandbox Code Playgroud)
与具体问题无关,没有必要为值更改提供两个侦听器方法.请注意,valueChangeListener通过事件和p:ajax listenernot,您可以同时获取旧值和新值,新值已在此时设置为模型值.如果您同时需要旧值和新值,请删除该listener属性<p:ajax>.这event="valueChange"是默认事件的方式,所以也删除它.
使用primefaces ajax,您可以在java中检索输入的值:
public void onValueChanged(AjaxBehaviorEvent event)
{
Employee employee = (Employee)((UIOutput)event.getSource()).getValue();
//...
}
<h:selectOneMenu required="true"
value="#{empl}" converter="#{bean.employeeConverter}">
<f:selectItems value="#{bean.employees}" var="varEmployee"
itemLabel="#{varEmployee}" itemValue="#{varEmployee}"/>
<p:ajax event="change" listener="#{bean.onValueChanged}"/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
因为您的值是String,所以不是强制转换为员工,而是使用员工对象并使用转换器或其toString()方法.
| 归档时间: |
|
| 查看次数: |
28516 次 |
| 最近记录: |