But why should we stop on such a simple solution? Let's evolve this idea 
(dynamic EL construction) till the whole madness?

Why only parameter value should be dynamic? What about bean name or action 
name? If action value used only on invoke application phase, and on rendering 
phase it is converted to MethodBinding object for validation (I'm not sure it 
is true)?

For example:

<s:link 
action="#{#{beanNameToEvaluate}.#{methodNameToEvaluate}(#{valueToEvaluate)})}" 
.../>

Looks ugly, eha?

But sometimes I thought about it - because of my humble knowledge of problems 
with it, as I can see the result of such construction only as a GET paramet in 
URL of the link.

So, may be it just possible to allow next code: 

<s:link 
dynaAction="#{beanNameToEvaluate}.#{methodNameToEvaluate}(#{valueToEvaluate)})" 
.../>

like additional attribute for tag s:link which will try to evaluate the code 
before considering it's contents as method name during page rendering phase?

Wouldn't it be convenient?

Again, in another words,

<s:link action="#{someBean.doSomeAction('value1')}" ... />

may be convenient to write as 

<s:link dynaAction="someBean.doSomeAction('value1')" ... />

or 

<s:link dynaAction="#{'someBean.doSomeAction(\'value1\')'}" ... />

which looks more real...

It will work the same way but with pre-evaluation of given expression.

For JSP tags it can be something like this: 

package org.jboss.seam.ui.tag;
  | 
  | import javax.el.ELContext;
  | import javax.el.ELException;
  | import javax.el.ValueExpression;
  | import javax.faces.FacesException;
  | import javax.faces.component.ActionSource;
  | import javax.faces.component.UIComponent;
  | import javax.faces.context.FacesContext;
  | import javax.faces.el.MethodBinding;
  | 
  | @SuppressWarnings("deprecation")
  | public class DynaLinkTag extends LinkTag {
  | 
  |     private String dynaAction;
  | 
  |     protected void setProperties(UIComponent component) {
  |             super.setProperties(component);
  |             setDynaActionProperty(getFacesContext(), component, 
getDynaAction());
  |     }
  | 
  |     public static void setDynaActionProperty(FacesContext context, 
UIComponent component, String dynaAction) {
  |             if (dynaAction != null) {
  |                     if (!(component instanceof ActionSource)) {
  |                             throw new IllegalArgumentException("Component " 
+ component.getClientId(context) + " is no ActionSource");
  |                     }
  |                     if (isValueReference(dynaAction)) {
  |                             ValueExpression vb = 
component.getValueExpression(dynaAction);
  |                             ELContext elContext = 
FacesContext.getCurrentInstance().getELContext();
  |                             String actionValue = null;
  |                             try {
  |                                     actionValue = (String) 
vb.getValue(elContext);
  |                             } catch (ELException ele) {
  |                                     throw new FacesException(ele);
  |                             }
  |                             MethodBinding mb = 
context.getApplication().createMethodBinding(actionValue, null);
  |                             ((ActionSource) component).setAction(mb);
  |                     } else {
  |                             component.getAttributes().put("outcome", 
dynaAction);
  |                     }
  |             }
  |     }
  | 
  |     public String getDynaAction() {
  |             return this.dynaAction;
  |     }
  | 
  |     public void setDynaAction(String dynaAction) {
  |             this.dynaAction = dynaAction;
  |     }
  | }
  | 
  | 

For Facelets it needs changes in Facelets code, I think, it is not so obvious 
as for JSP...

What do you think?

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4067933#4067933

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4067933
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to