2011-10-10 66 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