Win a copy of Murach's Python Programming this week in the Jython/Python forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

getAsObject converter  RSS feed

 
A Saari
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi All

I hava a selectManyListbox - the code below is its getter:

public java.util.List getMySelectManyList() {

// some code ...

Iterator iter = projectsList.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry)iter.next();
ProjectsList pl = new ProjectsList();
Integer theKey = (Integer)entry.getKey();
pl.setId(theKey.intValue());
pl.setLabel((String)entry.getValue());
mySelectManyList.add( new SelectItem( pl, pl.getLabel( )));
}
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Is there a question somewhere in there?
 
A Saari
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
oops...continued...

the list displays fine, but when i select an item and go to process it my converter fails - because i don't understand how to handle the value parameter:

public Object getAsObject(FacesContext ctx, UIComponent component, String value)
{

value looks like the result of a toString() call

does anyone know how to implement a converter when the SeletItem holds an object and a label ?

Thanks,
Amy
 
Gregg Bolinger
Ranch Hand
Posts: 15304
6
Chrome IntelliJ IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
your converter? Or one of the built in converters that you are using? You said it fails, what is the error message? What are you trying to convert to?
 
A Saari
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
My converter - is there a builtin converter for <h:selectManyListbox ?

public class ProjectsListConverter implements Converter
{

/** Creates a new instance of ProjectsListConverter */
public ProjectsListConverter() {
}

public Object getAsObject(FacesContext ctx, UIComponent component, String value)
{

if i just pass through the ArrayList of compenent children i get the error:

Validation Error: Value is not valid

from what i read - i have to override the equals method in the ProjectsList object - which is the only reason i created a ProjectsList class.

If i could just get my hands on an example of a converter implementation using an ArrayList of SelectItems where the SelectItem(obj, label) is the constructor being used.

I can't find very many examples of converters out there ...
Amy
 
A Saari
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
fyi

The method

public Object getAsObject(FacesContext ctx, UIComponent component, String value)

in my custom converter class has the 'value' param set to a call to toString() on the object used in the new SelectItem(obj,label) call.

So - you can send yourself the key to the item selected in your h:selectManyListbox by overriding toString

in my ProjectList class

// override to send the key to the getAsObject
// method in ProjectsListConverter
// shows up in the 'value' parameter
public String toString() {
return String.valueOf(this.getId());
}

and you can use the key to get the value from the collection class you used to hold the items you wanted to display in your listbox.

Amy
 
A Saari
Greenhorn
Posts: 26
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Solution

The class I was sending to the new SelectItem(myClass,myLabel) had an Integer as the projectID. I changed that to a String. Tossed out my custom converter, tossed out my validator. Made sure myClass extends SelectItem

public class ProjectsListItem extends javax.faces.model.SelectItem implements java.io.Serializable {

then I added <managed-property tag to the managed bean

<managed-bean>
<managed-bean-name>loginModel</managed-bean-name>
<managed-bean-class>xxxxxxxx.LoginModel</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>projectsList</managed-property>
</managed-bean>

and it works. No validation error. I think the response was sending a String and decode() for the component was trying to find/convert its value and I was getting a validation error because my list of SelectItems (projectsList) contained a class that had an Integer projectID rather than a String.

Amy
 
Ed Dh
Greenhorn
Posts: 4
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Is it possible to put/add the value selected to a map/list ?
If so how should I accomplish that ?

The code below works fine when displaying the page. The listbox get shown and is populated with the correct values.



The mapOfUnDimSelectItems is of type Map<String,Collection><SelectItem>).
The SelectItem objects have as value a String and as label a String and are created as follows: new SelectItem(unDimEntry.getSid(),unDimEntry.getDisplayNaam());

However when I submit the form I get an java.lang.IllegalArgumentException: Cannot convert UT-UD-005 of type class java.lang.String to interface java.util.List.
Where UT-UD-005 is the value that I selected.

I've spent hours on this. What am I doing wrong ? Is it possible to add the vallue to a map or list ? How should this be done ?

Thanks,
EDH
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!