1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.event;
20
21 import javax.el.ELContext;
22 import javax.el.ValueExpression;
23 import javax.faces.component.StateHolder;
24 import javax.faces.context.FacesContext;
25 import javax.faces.event.AbortProcessingException;
26 import javax.faces.event.ActionEvent;
27 import javax.faces.event.ActionListener;
28
29
30
31
32
33
34
35 public class SetPropertyActionListener implements ActionListener, StateHolder
36 {
37
38 private ValueExpression target;
39
40 private ValueExpression value;
41
42 private boolean _transient ;
43
44 public SetPropertyActionListener(){}
45
46 public SetPropertyActionListener(ValueExpression target, ValueExpression value)
47 {
48 this.target = target;
49 this.value = value;
50 }
51
52 public void processAction(ActionEvent actionEvent) throws AbortProcessingException
53 {
54
55 if( target == null )
56 {
57 throw new AbortProcessingException("@target has not been set");
58 }
59
60 if( value == null )
61 {
62 throw new AbortProcessingException("@value has not been set");
63 }
64
65 FacesContext ctx = FacesContext.getCurrentInstance();
66
67 if( ctx == null )
68 {
69 throw new AbortProcessingException("FacesContext ctx is null");
70 }
71
72 ELContext ectx = ctx.getELContext();
73
74 if( ectx == null )
75 {
76 throw new AbortProcessingException("ELContext ectx is null");
77 }
78
79
80
81 target.setValue(ectx, value.getValue(ectx));
82
83 }
84
85 public Object saveState(FacesContext context)
86 {
87 Object[] state = new Object[2];
88 state[0] = target;
89 state[1] = value;
90 return state;
91 }
92
93 public void restoreState(FacesContext context, Object state)
94 {
95 Object[] values = (Object[]) state;
96 target = (ValueExpression) values[0];
97 value = (ValueExpression) values[1];
98 }
99
100 public boolean isTransient()
101 {
102 return _transient;
103 }
104
105 public void setTransient(boolean trans)
106 {
107 this._transient = trans;
108 }
109
110 public ValueExpression getTarget()
111 {
112 return target;
113 }
114
115 public void setTarget(ValueExpression target)
116 {
117 this.target = target;
118 }
119
120 public ValueExpression getValue()
121 {
122 return value;
123 }
124
125 public void setValue(ValueExpression value)
126 {
127 this.value = value;
128 }
129
130 }