Jsf lectItemConverter实现javax.faces.convert.Converter{ 私有字符串无选择值=“SELECIONE”; @凌驾 公共字符串getAsString(FacesContext FacesContext、UICompon
lectItemConverter实现javax.faces.convert.Converter{ 私有字符串无选择值=“SELECIONE”; @凌驾 公共字符串getAsString(FacesContext FacesContext、UIComponent组件、对象obj){ if(obj==null){ 返回NO_SELECTION_值; }否则{ 试一试{ 方法Method=obj.getClass().getMethod(getIdMethodName(obj)); 返回String.valueOf(method.invoke(obj)); }捕获(例外e){ 抛出新的ConverterException(e); } } } 公共字符串getIdMethodName(对象obj){ 试一试{ Field[]fieldList=obj.getClass().getDeclaredFields(); 字段id=null; 用于(字段:字段列表){ if(字段isAnnotationPresent(Id.class)){ id=字段; 打破 } } 返回“get”+大写(id.getName()); }捕获(例外情况除外){ 抛出新的ConverterException(ex); } } 私有字符串大写(最后一行字符串){ 返回字符.toUpperCase(line.charAt(0))+行.substring(1); } @凌驾 公共对象getAsObject(FacesContext FacesContext、UIComponent组件、字符串val)引发ConverterException{ if(val==null){ 返回null; }else if(val.equals(无选择值)){ 返回null; }否则{ 对于(对象项:getSelectItems(组件)){ if(val.equals(getAsString(facesContext,component,item))){ 退货项目; } } 返回null; } } 受保护列表getSelectItems(UIComponent组件){ 列表=新的ArrayList(); 对于(UIComponent子级:component.getChildren()){ if(UISelectItem的子实例){ UISelectItem ui=(UISelectItem)子项; SelectItem=(SelectItem)ui.getValue(); 列表。添加(项目); }else if(UISelectItems的子实例){ UISelectItems ui=(UISelectItems)子项; 对象值=ui.getValue(); list.addAll((集合)值); } } 退货清单; } }Jsf lectItemConverter实现javax.faces.convert.Converter{ 私有字符串无选择值=“SELECIONE”; @凌驾 公共字符串getAsString(FacesContext FacesContext、UICompon,jsf,jsf-2,javabeans,converter,selectonemenu,Jsf,Jsf 2,Javabeans,Converter,Selectonemenu,lectItemConverter实现javax.faces.convert.Converter{ 私有字符串无选择值=“SELECIONE”; @凌驾 公共字符串getAsString(FacesContext FacesContext、UIComponent组件、对象obj){ if(obj==null){ 返回NO_SELECTION_值; }否则{ 试一试{ 方法Method=obj.getClass().getMethod(getIdMethodName(obj)); 返回String
我可以从selectonemenu中获取选定值的索引,并从绑定到selectonemenu的列表中获取选定值吗?为什么这些信息与支持bean相关?无论如何。。。只需执行(selectedItem)的
availableItems.indexOf(selectedItem)
。问题是如何获取selectedItem或selectedItem的索引?你所说的availableItems.indexOf(selectedItem)是什么意思!?对不起,我希望变量名能够自我记录,这样一个具有足够逻辑思维能力的人就可以很容易地理解它们所代表的内容。availableItems
正是您绑定到
的值,selectedItem
正是您绑定到
的值。这一行可以放在action(listener)方法中。同样,我不确定如果你手头已经有了选定的项目,那么需要计算索引有什么意义
<h:selectOneMenu ... converter="omnifaces.SelectItemsConverter">
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import javax.faces.component.UIComponent;
import javax.faces.component.UISelectItem;
import javax.faces.component.UISelectItems;
import javax.faces.context.FacesContext;
import javax.faces.convert.ConverterException;
import javax.faces.model.SelectItem;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.faces.Converter;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
/**
* @author: Jason Wheeler
* @description Converter for lists (SelectOneMenu, SelectManyMenu, etc)
* @created: 09/05/2013
*/
@Name("listConverter")
@BypassInterceptors
@Converter
public class ListConverter implements javax.faces.convert.Converter {
private String NO_SELECTION_VALUE = "org.jboss.seam.ui.NoSelectionConverter.noSelectionValue";
@Override
public String getAsString(FacesContext facesContext, UIComponent component, Object obj) {
if (obj == null) {
return NO_SELECTION_VALUE;
} else {
try {
Method method = obj.getClass().getMethod(getMethodName(obj));
return String.valueOf(method.invoke(obj));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
public String getMethodName(Object obj) {
return "getId";
}
@Override
public Object getAsObject(FacesContext facesContext, UIComponent component, String val) throws ConverterException {
if (val == null) {
return null;
} else if (val.equals(NO_SELECTION_VALUE)) {
return null;
} else {
for (SelectItem item : getSelectItems(component)) {
if (val.equals(getAsString(facesContext, component, item.getValue()))) {
return item.getValue();
}
}
return null;
}
}
protected Collection<SelectItem> getSelectItems(UIComponent component) {
Collection<SelectItem> collection = new ArrayList<SelectItem>();
for (UIComponent child : component.getChildren()) {
if (child instanceof UISelectItem) {
UISelectItem ui = (UISelectItem) child;
SelectItem item = (SelectItem) ui.getValue();
collection.add(item);
} else if (child instanceof UISelectItems) {
UISelectItems ui = (UISelectItems) child;
Object value = ui.getValue();
collection.addAll((Collection<SelectItem>) value);
}
}
return collection;
}
}