将参数从一种方法传递到另一种方法

时间:2011-04-18 15:45:50

标签: java jsf parameter-passing

我有一个相当愚蠢的问题,我需要将参数从一个方法传递给另一个方法。 我有以下方法

public String test(Employees emp)
{
   return emp.getempno();
}

我需要将emp.getempno()传递给我的另一种方法loadDetails();

我的问题是我无法在loadDetails()方法中添加参数,因为我在其他几个地方调用此方法。

我怎样才能做到这一点?我尝试将emp.getempno()放在collecion对象中,但问题是test(Employees emp)在我的第二种方法中没有调用methood。

请原谅我的无知,任何帮助都非常值得赞赏。

由于

更新1

这是我为test方法赋值的方法,当我将参数从一个页面传递到另一个页面时,从另一个类调用getTestValues方法。

public void getTestValues(List<Employees> paramList)  {
    for (Employees dataItem: paramList) {
        test(dataItem);
    }
}

更新2

这是我的loadDetails()方法,我在这里获取数据库值并在jsf页面中显示为数据表。

private void loadDetails() {

        try {

            dataDetails = anotherclass.deptDetails(passempno);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("error from loadDetails" + e.getMessage());
        }

    }

3 个答案:

答案 0 :(得分:1)

好吧,我仍然试图绕过这个,但我认为它变得更加清晰了。为了使loadDetails()正常运行,您需要知道员工编号(如上所示passempno)。我有两个回复:

  1. 最好的情况是,passempno似乎确实是 loadDetails()方法的参数。即,passempno的值是方法行为的一部分。因此,强烈优选的选项是简单地将员工编号添加为参数。您声明您不想这样做,因为其他地方正在使用它 - 该方法的其他客户在没有指定员工编号的情况下如何使用它?

  2. 如果这是父类的某些非平凡状态的一部分,那么可能您需要在对象的字段中输出员工编号。这不太理想,因为它隐藏(或至少使隐含)loadDetails()需要运行的重要状态。

  3. 如果与支持数据库存在状态交互,并且此处的员工编号是该状态的一部分,我建议将数据库交互的状态分解为保存员工编号的子类和任何其他国家(如上文2中所述)。

  4. 如果这有帮助,请告诉我。如果不是......让我知道我错过了什么。

答案 1 :(得分:1)

  

基本上我要做的是当我单击数据表中的一行时,我想将该行的主键传递给第二页的bean类,以便我可以在第二页中填充数据表。

     

JSF 1.1并希望在数据表中使用 commandlink outputlink作为 POST GET传递。

使用以下(假设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为请求参数,<managed-property>中的faces-config.xml将在部门支持中设置,最后是getter on该列表将根据员工ID懒惰地加载正确的部门。

答案 2 :(得分:0)

我致力于以ERP软件为生。您的LoadDetails方法不应将Employee作为参数。

我假设loadDetails在Load类上,并且您有一个计划负载或填满负载的Employee。如果是这种情况,Load类应该从创建时开始引用该Employee。