Using variables for start/end with the list template tag
I'm using the Play Framework and have a question about templates:
I want to use list as a for loop with from and to variables:
#{list pages:results.startPage..results.开发者_StackOverflowendPage, as:'page'}
${page}
#{/list}
Both results.startPage and results.endPage have valid values. I don't receive an error message, however no output is displayed. What am I doing wrong?
Thanks
EDIT: After spending the time writing a big answer, there is a bug in your code!
In your #list tag, you should have items
, and not pages
. Your code should read.
#{list items:results.startPage..results.endPage, as:'page'}
${page}
#{/list}
For those interested in how the Groovy Range variable works, below is a description, rather than me delete the long answer!
I think you are using the range method in the wrong way. The Groovy Range construct for the for loop, allows you to loop from one value to another value. This is generally a integer or a string, and not a List.
So, if you do the following, it will print 0 to 10
#{list items:0..10, as:'i'}
${i}
#{/list}
However, the values can be set in your controller. So if you want to use a start
and end
variable set in your controller (assume they are set to 0 and 10), you can do the following.
#{list items:start..end, as:'i'}
${i}
#{/list}
My controller to test that construct is as follows, and it works fine.
public static void index() {
int start = 0;
int end = 10;
render(start, end);
}
This will print the same 0 to 10. Even if I send these variables through encapsulated in a class, it still works fine.
Are you sure that startPage
and endPage
are integer values?
精彩评论