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

问题描述:

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

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

我需要通过emp.getempno()我的另一种方法loadDetails();

我的问题是我不能在loadDetails添加参数()方法,因为我打电话几个其他的这种方法地方。

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

对不起,我的无知,任何帮助是非常可观的。

感谢

更新1

这是我如何分配值测试方法和getTestValues方法正在从另一个类调用时我传递的参数,从一个网页到另一个。

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

更新2

这是我取分贝值,并显示JSF页面的DataTable我loadDetails()方法。

private void loadDetails() { 

     try { 

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

    } 
+1

loadDetails中的类是什么?我们来看看那个班的一些。 – corsiKa 2011-04-18 15:48:45

+0

@Polappan:如果你给了更多的代码,它会有所帮助。这应该是直接解决的,但需要更深入了解你想要做的事情。 – andersoj 2011-04-18 15:48:59

+0

@Polappan:好的,假设你在'loadDetails()'里面有'getempno()'的结果......你想用它做什么?你能告诉我们什么更新2看起来像使用员工编号的新逻辑(假设我们可以进入内部?) – andersoj 2011-04-18 16:23:12

基本上什么,我试图做的是,当我在一个数据表中单击某一行,我想通过该行的主键,把第二页的bean类,这样我可以填充在第二页中的数据表。

JSF 1.1,并希望通过如 POST 与数据表 commandlink outputLink的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; 
    } 

    // ... 
} 

(请注意,在吸气的延迟加载,在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> 

这里会发生什么,输出链接将导航到departments.jsp,并将当前员工ID作为请求参数在faces-config.xml中的<managed-property>会将其设置在部门支持中,最后,列表中的获得者将基于雇员ID懒惰地加载正确的部门。

+0

@BalusC感谢您将参数从一个jsf传递到另一个jsp页面的输入。不过,我在faces-config.xml中有问题。如果我添加,那么employeeId在DepartmentBacking bean中始终为空。如果我删除,则employeeId会正确传递。我需要在faces-config.xml中有。这可能是什么原因,我怎么能做到这一点。谢谢 – user75ponic 2011-04-19 06:06:34

+0

原因是因为重定向引发了新的请求。要使其工作(在JSF 1.1中),您必须获取会话范围。 – BalusC 2011-04-19 11:54:42

+0

@BalusC你的意思是我需要把值放在一个HTTP会话对象中,或者将bean的范围从请求改为会话? – user75ponic 2011-04-19 12:14:37

我工作在ERP软件的生活。你的LoadDetails方法不应该把Employee作为参数。

我假设loadDetails是一个Load类,并且你有一个负责调度负载或填充负载的Employee。如果是这种情况,那么Load类应该从创建时起对该员工有一个引用。

+0

我已经添加了更多的代码细节,如上面的更新1。 – user75ponic 2011-04-18 16:01:06

+0

这与'loadDetails()'有什么关系?让我们看看'loadDetails()',这样我们就可以弄清楚如何让员工进入它。 – corsiKa 2011-04-18 16:02:08

+0

loadDetails()代码被添加为上面的更新2。 – user75ponic 2011-04-18 16:08:38

好的,我仍然试图围绕这一点,但我认为它变得更清晰了。为了使loadDetails()正常工作,您需要知道员工编号(如上所示passempno)。我有两个反应:

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

  2. 如果这是父类的一些非平凡状态的一部分,那么可能是您需要将对象字段中的雇员编号删除。这是不太理想的,因为它隐藏了(或者至少是隐含的)重要的状态,即loadDetails()需要起作用。

  3. 如果与后台数据库存在有状态的交互,并且此处的员工编号是该状态的一部分,那么我建议将数据库交互的状态分解为保留员工编号的子类以及任何其他状态(如上面2所述)。

让我知道这是否有帮助;如果没有...让我知道我错过了什么。

+0

loadDetails()方法在类的构造函数中调用,以在调用jsf页面时加载值。所以我在loadDetails()方法中添加了一个参数,当我在构造函数中调用该方法时会出现问题。基本上我试图做的是,当我点击数据表中的一行时,我想将该行的主键传递给第二页的bean类,以便我可以在第二页中填充数据表。 – user75ponic 2011-04-18 17:58:35

+0

@Polappan:我猜想我想要包装的是你是否需要这个值来调用'loadDetails()'。如果你确实需要它,那么你需要它在构造函数中,这样或那样。如果你有两种不同的'loadDetails()',一个需要param,另一个不需要,那么你可能需要两种独立的方法... – andersoj 2011-04-18 18:26:33

+0

感谢您的输入。 – user75ponic 2011-04-19 15:21:04