根据Bean属性或UIInputText值的值,是否可以为UISelectOne使用自定义JSF转换器?
我需要得到一个问题的帮助。 我有一个应用程序,它显示来自数据库的数据。根据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#
我想出如何通过<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>
我希望这不会是唯一的自我回答问题,并会帮助别人
我想通了如何通过 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' ... SelectOneMenu> 'code' 我希望这不会只是自己回答的问题,并会帮助别人 Worsik –
Worsik
2012-04-02 12:25:48