JSF(和PrimeFaces)如何将参数传递给ManagedBean中的方法



我在inputtext中显示了一个Employee对象。例如,员工的名字显示在输入文本中。当这个名字的值改变时,它会调用一个方法。在这之前,我想调用一个方法,将员工的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>

我想我应该用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();
// ...

或者,如果将<h:dataTable>value封装在DataModel<Employee>中,则可以获得当前行,如下所示:

Employee employee = model.getRowData();
Long id = employee.getId();
// ...

与具体问题无关,没有必要为值更改设置两个侦听器方法。请注意,valueChangeListener使您有机会通过事件获得旧值和新值,而p:ajax listener则不然,此时新值已设置为模型值。如果同时需要旧值和新值,请删除<p:ajax>listener属性。顺便说一句,event="valueChange"已经是默认事件了,所以也可以删除它。

使用primefaces ajax,您可以在java doing中检索输入的值:

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>

由于您的值是String,所以您不必强制转换为employee,而是强制转换为String,或者使用employeeObject并使用Converter或其toString()方法。

尝试

<p:ajax event="save" onsuccess="#{employeeController.saveName(emp.id)}"/>

相关内容

  • 没有找到相关文章

最新更新