Hi Sergiu,
thanks a lot for your help and answer. The problem which I see now is
that I'm able to get all the selected values into one line printed out
from the $doc.display($prop.getName()), but I'm not able to get the
values with your recommended way. Anyway, concrete comments are below, I
described there what I did exactly.
On 09/ 2/11 04:59 AM, Sergiu Dumitriu wrote:
> Yes, this is supported and it's something quite fundamental, so it
> should work very well.
That's indeed good to know. For reference platform I've installed
xwiki-enterprise-jetty-hsqldb-3.1. All the attempts described below were
done on this platform.
> Open the class editor and add a new property of type Database List.
>
> Write the query you want to use to extract the possible values for that
> property from the database.
I did and I used this query:
select doc.name, doc.date from XWikiDocument doc
I selected Multiple Select and also Rational Storage. I also defined
Multiselect and Join separators to `,'. Size of the corresponding form
element in edit mode is set to `1'. The element itself does have its
name and pretty name set to `list'. The query here is just as simple as
possible example I'm using to get at least something out from the XWiki
and verify that this functionality is working...
> Make sure you select the Multiple Select and Relational Storage
> checkboxes. Multiple Select allows you to select and store multiple
> values from the list, while Relational Storage makes it easier to
> integrate that property into other queries by storing each selected item
> in its own entry in the database (without it all the selected values are
> stored in one row, concatenated into a VARCHAR column), and to store
> more than a few selected values (since the column allows at most 255
> characters in total).
>
> Change the Display Type select to what you want. Checkbox is one of the
> possible values. If you leave it to Select, also increase the value of
> the "Size of the corresponding form element in edit mode" option.
>
OK, I've used checkbox now.
> Now, when you display the field in edit mode it should appear as a list
> of checkboxes.
>
> To get the selected values, you mustn't use the display() or get()
> methods, since those are for generating HTML, and not for accessing the
> raw value of the property. Use something like this:
>
> $doc.getObject('Your.Class').getProperty('propertyName').values
>
> This should return an ArrayList with all the selected values.
OK, this is a little bit confusing to me so I'll describe what I did
exactly. After class definition I've made class's sheet and template.
Template code is what xwiki generates by default. sheet code is changed
by me to (full code listing):
{{velocity}}
#set($class = $doc.getObject('Test.UserPageCounterClass').xWikiClass)
#foreach($prop in $class.properties)
; $prop.prettyName
: $doc.display($prop.getName())
#end
#set($values =
$doc.getObject('Test.UserPageCounterClass').getProperty('list').values)
$values
#foreach($i in $values)
; $i
#end
{{/velocity}}
I've also added template provider to enable the template usage.
And finally, when I try to create the page from this template I see the
list of dates like:
2009-09-16 15:32:49.0
2009-09-16 15:32:49.0
2009-09-16 15:32:49.0
2009-09-16 15:32:49.0
2008-11-26 07:44:45.0
2008-08-27 20:00:06.0
2008-11-16 07:45:29.0
I don't see any page name and such so I guess my select query above is
wrong or at least `doc.name' is not defined column in the table.
And now I select few dates from this and hit Save&View button. What I
see as a resulting page is this:
list
2009-09-16 15:32:49.0, 2009-09-16 15:32:49.0, 2009-09-16
15:32:49.0, 2009-09-16 15:32:49.0, 2008-11-26 07:44:45.0
$values
from this it looks like my foreach ($i in $values) iteraction is not
working since it does not show any value. What's printing dates is
$doc.display($prop.getName()) call.
This is kind of confusing to me, but I'm really not sure if I did any
mistake along the way on this. Do you see anything suspicious on my
description?
Thanks a lot!
Karel
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs