1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.internal.component;
21
22 import org.apache.myfaces.tobago.component.Visual;
23 import org.apache.myfaces.tobago.util.ComponentUtils;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import javax.faces.component.UISelectItem;
28 import javax.faces.component.UISelectMany;
29 import javax.faces.context.FacesContext;
30 import java.lang.invoke.MethodHandles;
31
32
33
34
35 public abstract class AbstractUISelectItem extends UISelectItem implements Visual {
36
37 private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
38
39 private boolean itemValueLiteral;
40
41 @Override
42 public void setItemValue(final Object itemValue) {
43 if (itemValue instanceof String) {
44 itemValueLiteral = true;
45 } else if (itemValue == null) {
46
47 } else {
48 LOG.warn("Unexpected type of literal for attribute 'itemValue': "
49 + "type=" + itemValue.getClass().getName() + " value='" + itemValue + "'.");
50 }
51 super.setItemValue(itemValue);
52 }
53
54 @Override
55 public Object getItemValue() {
56 if (itemValueLiteral && !(getParent() instanceof UISelectMany)) {
57 final Object converted = ComponentUtils.getConvertedValue(
58 FacesContext.getCurrentInstance(), getParent(), (String) super.getItemValue());
59 return converted;
60 } else {
61 return super.getItemValue();
62 }
63 }
64 }