1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package javax.faces.event;
21
22 import javax.el.ELContext;
23 import javax.el.ELException;
24 import javax.el.MethodExpression;
25 import javax.faces.component.StateHolder;
26 import javax.faces.context.FacesContext;
27
28
29
30
31
32
33 public class MethodExpressionActionListener implements ActionListener, StateHolder {
34
35 private MethodExpression methodExpression;
36
37 private boolean isTransient = false;
38
39
40 public MethodExpressionActionListener() {
41 }
42
43 public MethodExpressionActionListener(MethodExpression methodExpression) {
44 this.methodExpression = methodExpression;
45 }
46
47 public void processAction(ActionEvent actionEvent) throws AbortProcessingException {
48 try
49 {
50 Object[] params = new Object[]{actionEvent};
51 methodExpression.invoke(elContext(), params);
52 }
53 catch (ELException e)
54 {
55 Throwable cause = e.getCause();
56 if (cause != null && cause instanceof AbortProcessingException)
57 {
58 throw (AbortProcessingException)cause;
59 }
60 else
61 {
62 throw e;
63 }
64 }
65 }
66
67 private ELContext elContext() {
68 return FacesContext.getCurrentInstance().getELContext();
69 }
70
71 public void restoreState(FacesContext context, Object state) {
72 methodExpression = (MethodExpression)state;
73 }
74
75 public Object saveState(FacesContext context) {
76 return methodExpression;
77 }
78
79 public void setTransient(boolean newTransientValue) {
80 isTransient = newTransientValue;
81 }
82
83 public boolean isTransient() {
84 return isTransient;
85 }
86
87 }