gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:17:38 24 4
gpt4 key购买 nike

我有一个在输入文本中显示的 Employee 对象。例如,员工的名字显示在输入文本中。当名字的值改变时,它会调用一个方法。在此之前,我想调用一个方法,将员工的 ID 保存在托管 bean 中,以便我知道哪个员工需要更改。我该怎么做,到目前为止我已经得到了:

<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 有一个 setter/getter 。所以 #{emp}.id 来获取它。

最佳答案

假设您确实位于重复组件内,其中 #{emp}被其 var 曝光属性,您可以从值更改监听器内的 EL 范围中获取它,如下所示:

FacesContext context = FacesContext.getCurrentInstance();
Employee employee = context.getApplication().evaluateExpressionGet(context, "#{emp}", Employee.class);
Long id = employee.getId();
// ...

或者,如果您将 value 包装起来<h:dataTable>的里面 DataModel<Employee> ,则可以获取当前行,如下:

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

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

关于java - JSF(和 PrimeFaces)如何将参数传递给 ManagedBean 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9805276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com