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 throw new AbortProcessingException("@target has not been set");
57
58 if( value == null )
59 throw new AbortProcessingException("@value has not been set");
60
61 FacesContext ctx = FacesContext.getCurrentInstance();
62
63 if( ctx == null )
64 throw new AbortProcessingException("FacesContext ctx is null");
65
66 ELContext ectx = ctx.getELContext();
67
68 if( ectx == null )
69 throw new AbortProcessingException("ELContext ectx is null");
70
71
72
73 target.setValue(ectx, value.getValue(ectx));
74
75 }
76
77 public Object saveState(FacesContext context)
78 {
79 Object[] state = new Object[2];
80 state[0] = target;
81 state[1] = value;
82 return state;
83 }
84
85 public void restoreState(FacesContext context, Object state)
86 {
87 Object[] values = (Object[]) state;
88 target = (ValueExpression) values[0];
89 value = (ValueExpression) values[1];
90 }
91
92 public boolean isTransient()
93 {
94 return _transient;
95 }
96
97 public void setTransient(boolean _transient)
98 {
99 this._transient = _transient;
100 }
101
102 public ValueExpression getTarget()
103 {
104 return target;
105 }
106
107 public void setTarget(ValueExpression target)
108 {
109 this.target = target;
110 }
111
112 public ValueExpression getValue()
113 {
114 return value;
115 }
116
117 public void setValue(ValueExpression value)
118 {
119 this.value = value;
120 }
121
122 }