JSF(和PrimeFaces)如何将参数传递给ManagedBean中的方法
我有一个我在inputtext中显示的Employee对象。 例如,员工的名字显示在inputtext中。 当这个名字的值改变时,它调用一个方法。 在此之前,我想调用一个方法,该方法将员工的ID保存在managedbean中,以便我知道哪个员工需要更改。 我怎么做到这一点,到目前为止我得到了这个:
我想我应该使用onValueChangedStart或firstNameChanged方法传递ID。 我该怎么做呢? 或者有更好的方法吗? emp有一个吸气剂。 所以#{emp} .id得到它。
假设您确实在一个重复组件中,其中#{emp}
已被其var
属性公开,您可以从值更改侦听器内的EL范围中获取它,如下所示:
FacesContext context = FacesContext.getCurrentInstance(); Employee employee = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class); Long id = employee.getId(); // ...
或者,如果将
的value
包装在DataModel
,则可以按如下方式获取当前行:
Employee employee = model.getRowData(); Long id = employee.getId(); // ...
与具体问题无关 ,没有必要为值更改提供两个侦听器方法。 请注意, valueChangeListener
使您有机会通过事件和p:ajax listener
获取旧值和新值,而新值已在此时设置为模型值。 如果需要旧值和新值,请删除
的listener
属性。 event="valueChange"
已经是默认事件的方式,所以也可以删除它。
使用primefaces ajax,你可以在java中检索输入的值:
public void onValueChanged(AjaxBehaviorEvent event) { Employee employee = (Employee)((UIOutput)event.getSource()).getValue(); //... }
因为您的值是String,所以不是强制转换为员工,而是使用员工对象并使用转换器或其toString()方法。
尝试