2011-10-10 35 views
2

我有這樣renderArgs在模板中爲空!框架

public static void renderCustomersList() { 
     System.out.println("renderArgs"+renderArgs.toString()); 
     render(renderArgs); 
    } 

控制器功能在我的常規模板

renderArgs $ {renderArgs.toString()}

我與價值renderArgs印在我的控制檯,但是當我將其打印傳遞給模板爲null。我想在main.html中使用這些值。我在renderCustomersList.html和main.html中都打印了renderArgs,兩個模板的值均爲null。什麼可能是錯誤。

回答

6

您不需要將renderArgs作爲參數傳遞給render函數 - 無論如何,renderArgs範圍內的所有變量均可在模板中使用。但不是在模板中訪問renderArgs對象本身,而是改爲獨立的值 - 請參見下文。

控制器:

public static void renderCustomersList() { 
    ... // some code to initialize yourVariable 
    renderArgs.put("yourVariable", yourVariable); 
    render(); // renderArgs not needed as a parameter 
} 

而且在模板:

${yourVariable} 
+1

非常感謝。 – Arasu

2

還要注意的是,你不必用戶renderArgs,如果你不想。您也可以通過一些參數來render()這樣的:

public static void renderCustomersList() { 
    ... 
    render(customers, products, foobar); 
} 

然後你就可以在你的模板這些參數與變量名獲得:

#{list items:customers, as:cust} 
... 
Foobar: ${foobar} 

的唯一情況中,你需要使用renderArgs是如果您想在模板中使用不同的名稱作爲模板中的參數。儘管這可能會讓人困惑,所以我儘量不去做。

+0

我發現隱含的方法相當混亂。例如,我學習了很難的方式:String message = getMessage(); render(message);'不等同於render(getMessage());',因爲後者不會將'message'項放入'renderArgs'中。因此,我傾向於更喜歡顯式的'renderArgs.put(「message」,getMessage());渲染();' – Mithfindel

+0

哦,當然,我覺得整個習語可能會打破編程的一些原則。我無法想象它會被調用什麼,但我不熟悉控制器中的變量名稱與模板中的變量名稱之間的斷開。 Spring使用'put(「message」,getMessage())'成語,我不相信它好多了,但它肯定更靈活。如果有某種方法可以約束哪些參數名稱傳遞給模板,在模板中使用,還是兩者兼而有之,我會感覺更舒服,但我認爲這不可能。我只是爲了簡潔而這樣做。 – andronikus