Jsf 如何将默认值设置为<;h:选择一个功能表>;
我正在尝试将默认值设置为h:selectOneMenu。但是,它不起作用 这是我的密码 index.xhtmlJsf 如何将默认值设置为<;h:选择一个功能表>;,jsf,jsf-2,Jsf,Jsf 2,我正在尝试将默认值设置为h:selectOneMenu。但是,它不起作用 这是我的密码 index.xhtml <h:body> <h:form id="test"> <h:selectOneMenu value="#{selectMenuBean.selectedItem}" title="select version" onchan
<h:body>
<h:form id="test">
<h:selectOneMenu value="#{selectMenuBean.selectedItem}"
title="select version"
onchange="submit()"
disabled="false" id="combo">
<f:selectItems value="#{selectMenuBean.selectItems}" />
</h:selectOneMenu>
</h:form>
</h:body>
BackingBean
private String selectedItem;
private List selectItems;
private int version=3;
public List getSelectItems() {
List<Version> selectedItems = ExportDao.getVersionsList();
System.out.println("List size: "+selectedItems.size());
selectItems = new ArrayList();
for (Version v1 : selectedItems) {
String DATE_FORMAT = "yyyy-MM-dd HH:mm";
//Create object of SimpleDateFormat and pass the desired date format.
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
selectItems.add(new SelectItem(v1.getVersion(), "V" + v1.getVersion() + "/" + sdf.format(v1.getDate())));
if(version = v1.getVersion()) // I have to check the version and set the matching version as selected.
selectedItem = "V" + v1.getVersion() + "/" + sdf.format(v1.getDate());
}
return selectItems;
}
私有字符串selectedItem;
私人物品清单;
私有int版本=3;
公共列表getSelectItems(){
List selectedItems=ExportDao.getVersionList();
System.out.println(“列表大小:+selectedItems.size());
selectItems=newarraylist();
用于(版本v1:selectedItems){
字符串日期\格式=“yyyy-MM-dd-HH:MM”;
//创建SimpleDataFormat对象并传递所需的日期格式。
SimpleDataFormat sdf=新的SimpleDataFormat(日期\格式);
添加(新的SelectItem(v1.getVersion(),“V”+v1.getVersion()+“/”+sdf.format(v1.getDate()));
if(version=v1.getVersion())//我必须检查版本并将匹配的版本设置为选中的版本。
选择editem=“V”+v1.getVersion()+“/”+sdf.format(v1.getDate());
}
返回选定的项目;
}
一些可能的解决方案:
1) 将selectItems的类型设置为SelectItem[]
而不是和取消输入列表
或者2)尝试如下设置selectItems的var、itemValue和itemLabel属性,并将实际版本对象放入列表中。
或者我最喜欢的,3)制作一个版本转换器,它知道如何将版本对象从字符串转换为字符串。如果您的版本对象被持久保存在数据库中并具有Id,则下面的示例。构造此对象后,您的selectedItem和List selectItems应具有典型版本(和列表),而不是字符串。JSF将自行处理转换
@FacesConverter(forClass=Version.class)
public class VersionConverter implements Converter{
public VersionConverter() {
}
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String value) {
if (value == null || value.length() == 0) {
return null;
}
try {
// Get an EJB that can fetch the Version from a DB. Alternativly, do whatever you need to get your object from a string.
InitialContext ic = new InitialContext();
MyDao myDao = (MyDao)ic.lookup(String.format("java:global/%s/MyBean", (String)ic.lookup("java:module/ModuleName")));
return myDao.findEntity(Version.class, getKey(value));
} catch (NamingException e) {
return null;
}
}
Long getKey(String value) {
Long key;
key = Long.valueOf(value);
return key;
}
String getStringKey(Long value) {
StringBuilder sb = new StringBuilder();
sb.append(value);
return sb.toString();
}
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object object) {
if (object == null) {
return null;
}
if (object instanceof Version) {
Version e = (Version) object;
return getStringKey(e.getId());
}
else
throw new IllegalArgumentException("object " + object + " is of type " + object.getClass().getName() + "; expected type: " + Version.class.getName());
}
}
您正在使用项目标签而不是项目值设置
selectedItem
替换
selectedItem = "V" + v1.getVersion() + "/" + sdf.format(v1.getDate());
借
嗨,巴卢斯克,我已经像你说的那样改变了。不过,运气不好。我正在打印selectedItem。它正在打印所选内容,但没有设置值。您好,Franke先生,谢谢您的回复。我将尝试这个解决方案。
selectedItem = v1.getVersion();