我需要帮助解决问题。 我有一个应用程序,它显示数据库中的数据。
在数据库中,我使用一列来识别时间变化的对象(对象的版本)。 我的意思是行具有不同的ID,但具有相同的OBJECT_ID。 它们也通过有效性DATE列(VALID_FROM和VALID_TO)区分,因此我可以在选定的时间内找到正确的对象版本。
当向用户显示页面时,他将DATE设置为显示数据。 页面上有表格,有选择框(它们的项目是数据库中的对象)。 我只需要显示符合有效性条件的项目。 表单处理之前一切正常。
我正在使用自定义转换器,它将String值(数据库表中的行ID)转换为我的模型的Object,但我需要两个值来查找行。 (用户表单中的ID和日期)。
转换器方法getAsObject只获取一个VALUE参数(来自Select Box的ID)。 如何让第二个参数工作? 我可以从Bean或JSF输入对象中找到它吗?
如果有某种方式包含使用< f:attribute />,是否可以设置< f:attribute />通过Bean中的Java代码? (表单由bean方法生成)。
我很抱歉我的英语,我尽我所能:o)
P.S。:由于使用了JOIN,日期参数在sqlMap中很重要。我按ID搜索,但其他表由OBJECT_ID(version)=>连接。我只需要一行
感谢您的回答并度过愉快的一天
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);
}
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 :(得分:1)
我想通过转换器中的代码<f:attribute/>
如何做到这一点:
Date day = (Date) component.getAttributes().get("dateForSearch");
生成带有代码的SelectBox后的和bean方法:
uiInput.getAttributes().put("dateForSearch", getSelectedDate());
并且在没有动态生成我使用的表单的页面中:
<SelectOneMenu>
...
<f:attribute name="dateForSearch" value="#{myBean.selectedDate}" />
</SelectOneMenu>
我希望这不仅是自我回答的问题而且会帮助其他人