Java 将参数从一个方法传递到另一个方法
我有一个相当愚蠢的问题,我需要将一个参数从一个方法传递到另一个方法。 我有以下方法Java 将参数从一个方法传递到另一个方法,java,jsf,parameter-passing,Java,Jsf,Parameter Passing,我有一个相当愚蠢的问题,我需要将一个参数从一个方法传递到另一个方法。 我有以下方法 public String test(Employees emp) { return emp.getempno(); } 我需要将emp.getempno()传递给我的另一个方法loadDetails() 我的问题是我不能在loadDetails()方法中添加参数,因为我在其他几个地方调用了这个方法 我怎样才能做到这一点?我尝试将emp.getempno()放入collecion对象中,但问题是test(
public String test(Employees emp)
{
return emp.getempno();
}
我需要将emp.getempno()
传递给我的另一个方法loadDetails()代码>
我的问题是我不能在loadDetails()方法中添加参数,因为我在其他几个地方调用了这个方法
我怎样才能做到这一点?我尝试将emp.getempno()
放入collecion对象中,但问题是test(Employees emp)
方法在我的第二个方法中没有被调用
请原谅我的无知,任何帮助都是值得感激的
谢谢
更新1
这就是当我将参数从一个页面传递到另一个页面时,如何将值分配给test方法,以及如何从另一个类调用getTestValues方法
public void getTestValues(List<Employees> paramList) {
for (Employees dataItem: paramList) {
test(dataItem);
}
}
我以ERP软件为生。LoadDetails方法不应将Employee作为参数
我假设loadDetails在Load类中,并且您有一名安排加载或填充加载的员工。如果是这样的话,Load类应该从创建时起就引用该雇员。好的,我仍在努力解决这个问题,但我认为它变得更清晰了。为了使loadDetails()
正常工作,您需要知道员工编号(如上面的passempno
中所示)。我有两个回应:
最好的情况是,passempno
实际上是loadDetails()
方法的一个参数。也就是说,passempno
的值是方法行为的一部分。因此,强烈建议只需添加员工编号作为参数。您声明不想这样做,因为其他地方正在使用它——在没有指定员工编号的情况下,该方法的其他客户端如何使用它
如果这是父类的一些非平凡状态的一部分,那么可能需要在对象的字段中存储雇员编号。这是不可取的,因为它隐藏(或至少隐式地)了loadDetails()
需要运行的重要状态
如果存在与支持数据库的有状态交互,并且此处的雇员编号是该状态的一部分,我建议将数据库交互的状态分解为一个子类,该子类包含雇员编号和任何其他状态(如上面第2条所建议的)
让我知道这是否有帮助;如果不是。。。让我知道我错过了什么
基本上,我要做的是,当我单击datatable中的一行时,我希望将该行的主键传递给第二个页面的bean类,以便在第二个页面中填充datatable
JSF1.1,并希望在datatable中使用commandlink outputlink作为POST GET传递
使用以下命令(假设JSF 1.1):
EmployeeBacking
public class EmployeeBacking {
private List<Employee> list;
public EmployeeBacking() {
list = employeeService.list();
}
// ...
}
public class DepartmentBacking {
private Long employeeId;
private List<Department> list;
private void load() {
list = departmentService.list(employeeId);
}
public List<Department> getList() {
if (list == null) load();
return list;
}
// ...
}
部门支持
public class EmployeeBacking {
private List<Employee> list;
public EmployeeBacking() {
list = employeeService.list();
}
// ...
}
public class DepartmentBacking {
private Long employeeId;
private List<Department> list;
private void load() {
list = departmentService.list(employeeId);
}
public List<Department> getList() {
if (list == null) load();
return list;
}
// ...
}
faces config.xml
<managed-bean>
<managed-bean-name>employeeBacking</managed-bean-name>
<managed-bean-class>com.example.EmployeeBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>departmentBacking</managed-bean-name>
<managed-bean-class>com.example.DepartmentBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>employeeId</property-name>
<value>#{param.employeeId}</value>
</managed-property>
</managed-bean>
雇员支持
com.example.EmployeeBacking
要求
部门支持
com.example.DepartmentBacking
要求
雇员ID
#{param.employeeId}
这里发生了什么,outputlink将以当前员工ID作为请求参数导航到departments.jsp
,而faces config.xml
中的
将在部门备份中设置它,最后列表上的getter将根据员工ID延迟加载正确的部门。loadDetails在哪个类中?让我们看看那个类的一些内容。@Polappan:如果你能多给我一点代码,那会有帮助的。这应该很容易解决,但需要对您试图做的事情有更多的了解。@Polappan:好的,假设您在loadDetails()
中得到了getempno()
的结果。。。你想用它做什么?你能告诉我们更新2使用员工编号的新逻辑是什么样子的吗(假设我们可以把它放在里面?@andersoj非常抱歉,我忘了添加参数,我已经在更新2中更正了。我想在另一个类中将empno作为参数传递给我的方法。函数要求是什么?你肯定走错了方向。这与loadDetails()
有什么关系?让我们看看loadDetails()
,这样我们就可以知道如何让员工进入其中。调用jsf页面时,在类的构造函数中调用loadDetails()方法来加载值。所以我在loadDetails()方法中添加了一个参数,在构造函数中调用该方法时会出现问题。基本上,我想做的是,当我单击datatable中的一行时,我想将该行的主键传递给第二页的bean类,这样我就可以在第二页中填充datatable。@Polapan:我想我想弄清楚的是,您是否需要该值来调用loadDetails()
。如果您确实需要它,那么您需要在构造函数中使用它,不管是哪种方式。如果您有两种不同风格的loadDetails()
,一种需要参数,另一种不需要,那么您可能需要两种不同的方法…@BalusC感谢您的输入,将参数从一个jsf传递到另一个jsp页面。但是,我在faces-config.xml中有一个问题。如果我添加,那么DepartmentBackingBean中的employeeId总是空的。如果我删除了employeeId,那么就正确地传递了employeeId。我需要在faces-config.xml中添加。这可能是什么原因,我如何才能使这项工作。感谢原因是重定向触发了一个新请求。要使其工作(在JSF 1.1中),您必须获取会话作用域。@BalusC您的意思是我需要将该值放入HTTP会话对象中,或者将bean的作用域从请求更改为会话?哦,等等,毕竟,您想要的是HTTP GET请求,而不是HTTP POST请求。因此,将
替换为
,并移除整个<managed-bean>
<managed-bean-name>employeeBacking</managed-bean-name>
<managed-bean-class>com.example.EmployeeBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>departmentBacking</managed-bean-name>
<managed-bean-class>com.example.DepartmentBacking</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>employeeId</property-name>
<value>#{param.employeeId}</value>
</managed-property>
</managed-bean>