1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.view.facelets.el;
20
21 import java.io.Externalizable;
22 import java.io.IOException;
23 import java.io.ObjectInput;
24 import java.io.ObjectOutput;
25
26 import javax.el.ELContext;
27 import javax.el.MethodExpression;
28 import javax.el.ValueExpression;
29 import javax.faces.FacesWrapper;
30 import javax.faces.component.UIComponent;
31 import javax.faces.context.FacesContext;
32 import javax.faces.validator.Validator;
33 import javax.faces.validator.ValidatorException;
34
35
36
37
38
39 public class RedirectMethodExpressionValueExpressionValidator
40 implements Validator, FacesWrapper<ValueExpression>, Externalizable
41 {
42 private ValueExpression valueExpression;
43
44 public RedirectMethodExpressionValueExpressionValidator()
45 {
46 }
47
48 public RedirectMethodExpressionValueExpressionValidator(ValueExpression valueExpression)
49 {
50 this.valueExpression = valueExpression;
51 }
52
53 public void validate(FacesContext context, UIComponent component,
54 Object value) throws ValidatorException
55 {
56 getMethodExpression().invoke(FacesContext.getCurrentInstance().getELContext(), new Object[]{context,component,value});
57 }
58
59 private MethodExpression getMethodExpression()
60 {
61 return getMethodExpression(FacesContext.getCurrentInstance().getELContext());
62 }
63
64 private MethodExpression getMethodExpression(ELContext context)
65 {
66 Object meOrVe = valueExpression.getValue(context);
67 if (meOrVe instanceof MethodExpression)
68 {
69 return (MethodExpression) meOrVe;
70 }
71 else if (meOrVe instanceof ValueExpression)
72 {
73 while (meOrVe != null && meOrVe instanceof ValueExpression)
74 {
75 meOrVe = ((ValueExpression)meOrVe).getValue(context);
76 }
77 return (MethodExpression) meOrVe;
78 }
79 else
80 {
81 return null;
82 }
83 }
84
85 public ValueExpression getWrapped()
86 {
87 return valueExpression;
88 }
89 public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
90 {
91 this.valueExpression = (ValueExpression) in.readObject();
92 }
93
94 public void writeExternal(ObjectOutput out) throws IOException
95 {
96 out.writeObject(this.valueExpression);
97 }
98
99 }