gpt4 book ai didi

java -

转载 作者:搜寻专家 更新时间:2023-11-01 01:22:19 25 4
gpt4 key购买 nike

我正在使用 JSF 2.0 和 Primefaces 3.4.2

我在 JSF 页面中有以下内容

<p:selectOneMenu value="#{mb.employee}">
<f:selectItems value="#{mb.employeeList}" var="emp"
itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeCode}"/>
<p:ajax listener="#{mb.changeMethod}" />
</p:selectOneMenu>

问题是当我在 selectOneMenu 中选择一个值时,我在 ManagedBean 的 changeMethod 中得到 null,为此 System.out.println("val "+employee.getEmployeeName());

这可能是什么原因?我该如何解决这个问题?任何帮助都是非常值得赞赏的。

ManagedBean代码

@Named("mb")
@ViewAccessScoped
public class MyBean implements Serializable {

private Employee employee;
private List<Employee> employeeList;

@Inject
EmployeeService employeeService;

@PostConstruct
public void loadEmployees() {
employeeList = employeeService.getEmployees();
}


public void changeMethod() {
System.out.println("val "+employee.getEmployeeName());
}


/* getters and setters for employee and employeeList */
.... methods
/* */

最佳答案

您没有在 <p:ajax> 上指定要处理的表单元素的组件,因此 ajax 请求可能会提交多个可能与其他字段验证冲突的值。请记住,如果提交了一个值但未通过验证,则不会为模型设置任何请求值。当您到达应用程序(事件)阶段时,模型值将不会反射(reflect)任何提交的请求值。

试试这个:

<p:selectOneMenu value="#{mb.employee}">
<f:selectItems value="#{mb.employeeList}" var="emp"
itemLabel="#{emp.employeeName}" itemValue="#{emp.employeeCode}"/>
<p:ajax process="@this" partialSubmit="true" listener="#{mb.changeMethod}" />
</p:selectOneMenu>

在上面,您将仅提交要应用于模型的当前组件请求值。

编辑:

实际上,这可能不是验证问题,因为在 ajax 事件中没有提交任何请求值。

根据 Primefaces 手册:

process null String Component(s) to process in partial request.

update null String Component(s) to update with ajax.

第二列是默认值。中标<f:ajax> execute属性默认为 @this然而这不是<p:ajax>的情况.如果您想提交当前组件,那么您必须在 process 中指定它属性。

关于java - <p :selectOneMenu listener method returns null when a value is selected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987501/

25 4 0

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