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>