2011-04-18 113 views
0

我有一個相當愚蠢的問題,我需要將參數從一種方法傳遞給另一種方法。 我有以下方法將參數從一種方法傳遞到另一種

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

回答

1

基本上什麼,我試圖做的是,當我在一個數據表中單擊某一行,我想通過該行的主鍵,把第二頁的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

0

我工作在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

1

好的,我仍然試圖圍繞這一點,但我認爲它變得更清晰了。爲了使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

相關問題