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.event;
21
22 import org.apache.myfaces.tobago.internal.util.FindComponentUtils;
23 import org.slf4j.Logger;
24 import org.slf4j.LoggerFactory;
25
26 import javax.el.ValueExpression;
27 import javax.faces.component.StateHolder;
28 import javax.faces.component.UIComponent;
29 import javax.faces.component.UIComponentBase;
30 import javax.faces.context.FacesContext;
31 import javax.faces.event.ActionEvent;
32
33
34 public class ValueExpressionPopupActionListener extends AbstractPopupActionListener implements StateHolder {
35
36 private static final Logger LOG = LoggerFactory.getLogger(ValueExpressionPopupActionListener.class);
37
38 private ValueExpression popupIdExpression;
39
40 public ValueExpressionPopupActionListener(ValueExpression expression) {
41 popupIdExpression = expression;
42 }
43
44
45
46
47 @Deprecated
48 public ValueExpressionPopupActionListener(Object expression) {
49 popupIdExpression = (ValueExpression) expression;
50 }
51
52
53
54
55 public ValueExpressionPopupActionListener() {
56 }
57
58 @Override
59 protected UIComponent getPopup(ActionEvent actionEvent) {
60 String id = (String) popupIdExpression.getValue(FacesContext.getCurrentInstance().getELContext());
61 UIComponent popup = FindComponentUtils.findComponent(actionEvent.getComponent(), id);
62 if (popup == null) {
63 LOG.error("Found no popup for \""
64 + popupIdExpression.getExpressionString() + "\" := \""
65 + id + "\"! Search base componentId : "
66 + actionEvent.getComponent().getClientId(FacesContext.getCurrentInstance()));
67 }
68 return popup;
69 }
70
71 public boolean isTransient() {
72 return false;
73 }
74
75 public void restoreState(FacesContext context, Object state) {
76 Object[] values = (Object[]) state;
77 popupIdExpression = (ValueExpression) UIComponentBase.restoreAttachedState(context, values[0]);
78 }
79
80 public Object saveState(FacesContext context) {
81 Object[] values = new Object[1];
82 values[0] = UIComponentBase.saveAttachedState(context, popupIdExpression);
83 return values;
84 }
85
86
87 public void setTransient(boolean newTransientValue) {
88
89 }
90 }