2012-01-09 104 views
1

我打電話render()有幾個參數,其中第一個是String說法,我作爲一個參數:爲什麼在這裏呈現不正確的模板?

公共靜態無效動作(字符串URL){ ...

渲染( URL,...); }

我得到這個錯誤:

protected static void render(Object... args) { 
    String templateName = null; 
    if (args.length > 0 && args[0] instanceof String && LocalVariablesNamesTracer.getAllLocalVariableNames(args[0]).isEmpty()) { 

     // I'm getting into this branch 

     templateName = args[0].toString(); 
    } else { 
     templateName = template(); 
    } 
    renderTemplate(templateName, args); 
} 

什麼if努力做到:

The template http://the.contents.of/urlParameter does not exist. 

現在,我通過render(),在那裏我看到這個片段的調試?爲什麼我會進入它 - 這是因爲我沒有使用局部變量url?這是記錄的嗎?這裏的推理是什麼?

我使用的版本是1.2.x-c40cf37(這是1.2.4之後的某個地方)。

回答

3

如果您提供了一個字符串作爲第一個參數,那麼它會假定它是要呈現的模板的名稱。

例子:

render("@password", url); 

這將使密碼模板和URL變量傳遞給它。

在你的情況,你可以做這樣的事情,而不是:

render("@action", url); 

編輯:

正如你也可以做這樣的事情的替代:

renderArgs.put("url", url); 
render(); 

希望它能幫助。

+0

是的,我不知道這件事。它記錄在任何地方嗎? – ripper234 2012-01-09 10:18:12

+0

古怪的約定。當然不會遵循最小的原則 - http://en.wikipedia.org/wiki/Principle_of_least_astonishment – ripper234 2012-01-09 10:21:17

+1

我只在教程 - http://www.playframework.org/documentation/1.2找到它「記錄」。 4/guide9 – Franz 2012-01-09 10:29:27