1

I need to get help with a problem. I have an application, which displays data from database.

In database I am using one column for identifying an object with changes in time (version of object). I mean that rows have different IDs, but same OBJECT_ID. They are also differentiated by validity DATE columns (VALID_FROM and VALID_TO), so i can find the proper version of object in selected time.

When page is shown to user, he sets DATE for displaying data. There is form on page, with Select Boxes (their items are object from database). I need to show only items, that satisfy the validity condition. Everything is OK before form handling.

I am using custom converter, that converts String value (ID of row in database table) to Object of my model, but I need two values for row to find. (ID and DATE from user form).

Converter method getAsObject gets only one VALUE parameter (ID from Select Box). How to get second parametr to work? Can i find it from Bean or from JSF input object?

If there is some way that includes using <f:attribute/>, is there way to set <f:attribute/> by Java code in Bean? (Form is generated by bean method).

I am sorry for my English, i try my best :o)

P.S.: Date parameter is important in sqlMap because of JOIN used. I search by ID, but other tables are joined by OBJECT_ID (version) => and i need to get one row only

Thanks for answers and have a nice day

Worsik

Edit: Select Boxes are generated by this code:

                uiInput = new HtmlSelectOneMenu();
                UISelectItems items = new UISelectItems();
                items.setValueExpression("value", createValueExpression(
                        "#{myBean.referencedList." + item.getName() + "}",
                            List.class));
                uiInput.getChildren().add(items);

Converter method looks like this:

public Object getAsObject(FacesContext context, UIComponent component, String value) 
{
    if (value.equals("")) {
        return null;
    }
    Class entityType = component.getValueExpression("value").getType(
            FacesContext.getCurrentInstance().getELContext());
    // TODO: need to get date value from form
            Date day = new Date();
    return myService(context).findEntityById(entityType, Long.valueOf(value), day);
}

entityType is Class of model for object from database

myService calls Dao object and sqlMap is called

select * from object_table as t1 
JOIN other_table as t2 ON t1.object_fk = t2.object_id // (or version_id) 
where t1.id = #id:INTEGER#
and t2.valid_from <= #day:DATE#
and t2.valid_to >= #day:DATE#
Worsik
  • 57
  • 3
  • 11
  • I figured out how to do this by by code in converter: ´code´ Date day = (Date) component.getAttributes().get("dateForSearch"); ´code´ and in bean method after generating SelectBox with code: ´code´ uiInput.getAttributes().put("dateForSearch", getSelectedDate()); ´code´ and in pages without dynamic generating of forms i used: ´code´ ... ´code´ I hope that this will not be only self answered question and will help somebody else Worsik – Worsik Apr 02 '12 at 12:25

1 Answers1

1

I figured out how to do this by <f:attribute/> by code in converter:

Date day = (Date) component.getAttributes().get("dateForSearch");

and in bean method after generating SelectBox with code:

uiInput.getAttributes().put("dateForSearch", getSelectedDate()); 

and in pages without dynamic generating of forms i used:

<SelectOneMenu> 
... 
<f:attribute name="dateForSearch" value="#{myBean.selectedDate}" />
</SelectOneMenu> 

I hope that this will not be only self answered question and will help somebody else

forsvarir
  • 10,749
  • 6
  • 46
  • 77
Worsik
  • 57
  • 3
  • 11