我有一个相当愚蠢的问题,我需要从一个方法传递一个参数到另一个方法。我有以下方法
public String test(Employees emp)
{
return emp.getempno();
}
我需要将emp.getempno()
传递给另一个方法loadDetails();
我的问题是我不能在loadDetails()方法中添加一个参数,因为我在其他几个地方调用这个方法。
我怎样才能做到这一点?我试着把emp.getempno()
在集合对象,但问题是test(Employees emp)
方法没有被调用在我的第二个方法。
这就是我如何赋值给测试方法和getTestValues方法是从另一个类调用当我传递参数从一个页面到另一个
public void getTestValues(List<Employees> paramList) {
for (Employees dataItem: paramList) {
test(dataItem);
}
}
更新2 这是我的loadDetails()方法,我正在获取db值,并在jsf页面中显示为数据表。
private void loadDetails() {
try {
dataDetails = anotherclass.deptDetails(passempno);
} catch (Exception e) {
e.printStackTrace();
logger.error("error from loadDetails" + e.getMessage());
}
}
基本上我想做的是当我点击数据表中的一行时,我想将该行的主键传递给第二页的bean类,以便我可以在第二页填充数据表
JSF 1.1,并希望在datatable中传递
POSTGET与commandlinkoutputlink。
使用以下代码(假设是JSF 1.1):
EmployeeBacking
public class EmployeeBacking {
private List<Employee> list;
public EmployeeBacking() {
list = employeeService.list();
}
// ...
}
employees.jsp
<h:dataTable value="#{employeeBacking.list}" var="employee">
<h:column>
<h:outputText value="#{employee.name}" />
</h:column>
<h:column>
<h:outputLink value="departments.jsp">
<h:outputText value="Show departments" />
<f:param name="employeeId" value="#{employee.id}" />
</h:outputLink>
</h:column>
</h:dataTable>
DepartmentBacking
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;
}
// ...
}
(请注意getter中的延迟加载,在JSF 1.2中您可以更好地使用@PostConstruct
方法)
departments.jsp
<h:dataTable value="#{departmentBacking.list}" var="department">
<h:column>
<h:outputText value="#{department.name}" />
</h:column>
</h:dataTable>
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>
这里发生了什么,outputlink将导航到departments.jsp
,当前员工ID作为请求参数,faces-config.xml
中的<managed-property>
将在部门后台设置它,最后列表上的getter将根据员工ID延迟加载正确的部门。
好吧,我还在努力理解这个问题,但我认为它变得更清晰了。为了使loadDetails()
正常工作,您需要知道一个员工编号(如上passempno
所示)。我有两个回答:
-
最好的情况下,看起来
passempno
是实际上是loadDetails()
方法的一个参数。也就是说,passempno
的值是方法行为的一部分。因此,强烈首选的选项是简单地将员工编号作为参数添加。您声明不想这样做,因为其他地方正在使用它——如果没有指定员工编号,该方法的其他客户端如何使用它? -
如果这是父类的一些重要状态的一部分,那么可能您需要在对象的字段中保存员工编号。这是不太理想的,因为它隐藏了(或者至少是隐式的)
loadDetails()
需要运行的重要状态。 -
如果存在与后台数据库的有状态交互,并且这里的员工编号是该状态的一部分,我建议将数据库交互的状态分解为保存员工编号和任何其他状态的子类(如上面2所建议的)。
让我知道这是否有帮助;如果不是……让我知道我错过了什么
我以开发ERP软件为生。你的LoadDetails方法不应该接受Employee作为参数。
我假设loadDetails是在一个Load类上,并且你有一个Employee来安排加载,或者填充加载。如果是这种情况,Load类应该从创建时起就有对Employee的引用。