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