2012-04-02 12 views
1

我需要得到一个问题的帮助。 我有一个应用程序,它显示来自数据库的数据。根据Bean属性或UIInputText值的值,是否可以为UISelectOne使用自定义JSF转换器?

在数据库中,我使用一列来识别时间(对象版本)更改的对象。 我的意思是行有不同的ID,但是OBJECT_ID相同。 它们也通过有效性DATE列(VALID_FROM和VALID_TO)进行区分,因此我可以在选定时间内找到正确版本的对象。

当向用户显示页面时,他将DATE设置为显示数据。 页面上有表格,选择框(它们的项目是来自数据库的对象)。 我只需要显示满足有效性条件的项目。 表单处理前一切正常。

我正在使用自定义转换器,它将字符串值(数据库表中的行的ID)转换为我的模型的对象,但我需要两个值来查找行。 (用户表单中的ID和DATE)。

Converter方法getAsObject只获取一个VALUE参数(来自Select Box的ID)。 如何获得第二个参数的工作? 我可以从Bean或从JSF输入对象中找到它吗?

如果有某种方法,包括使用< f:attribute />,有没有办法通过Bean中的Java代码设置< f:attribute />? (表单由bean方法生成)。

我为我的英语对不起,我尽力:O)

P.S:日期参数是在SQLMAP因为连接使用非常重要。我通过ID进行搜索,但其他表由OBJECT_ID(版本)=>加盟,我需要得到一个行仅

感谢答案,有一个愉快的一天

Worsik

编辑: 选择

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

转换方法是这样的::

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); 
} 
01盒通过该代码来生成

的EntityType是模型类从数据库对象

为myService调用DAO对象和SQLMAP被称为

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# 
+0

我想通了如何通过 by code in converter: 'code' Date date =(Date) component.getAttributes()。get(“dateForSearch”); 'code' and in bean method after generated SelectBox with code: 'code' uiInput.getAttributes()。put(“dateForSearch”,getSelectedDate()); 'code' ,并在不我用形式动态生成的网页: 'code' ... 'code' 我希望这不会只是自己回答的问题,并会帮助别人 Worsik – Worsik 2012-04-02 12:25:48

回答

1

我想出如何通过<f:attribute/>通过代码转换器做到这一点:

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

和bean方法生成SelectBox后用代码:

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

,并在不动态生成的网页我用形式:

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

我希望这不会是唯一的自我回答问题,并会帮助别人

相关问题