1 package org.weda.tapestry.component; 2 3 import org.apache.tapestry.IMarkupWriter; 4 import org.apache.tapestry.IRequestCycle; 5 import org.apache.tapestry.IScript; 6 import org.apache.tapestry.PageRenderSupport; 7 import org.apache.tapestry.TapestryUtils; 8 import org.apache.tapestry.annotations.ComponentClass; 9 import org.apache.tapestry.annotations.InjectScript; 10 import org.apache.tapestry.annotations.Parameter; 11 import org.apache.tapestry.form.AbstractFormComponent; 12 import static org.weda.Constants.*; 13 14 /**Компонент отображающий действие в качестве кнопки. 15 * 16 * @author tim 17 */ 18 @ComponentClass(allowBody=false,allowInformalParameters=false) 19 public abstract class Action extends AbstractAction { 20 @Parameter(required=true) 21 public abstract boolean isRenderAsLink(); 22 @InjectScript("Action.script") 23 public abstract IScript getScript(); 24 25 public String getOnClickHandler(){ 26 AbstractFormComponent comp = (AbstractFormComponent) 27 (isRenderAsLink() ? getComponent("link") : getComponent("button")); 28 return String.format( 29 "setFormTarget('%s','%s')" 30 , comp.getForm().getName() 31 , getActionState().getTargetFrame()); 32 } 33 34 public String getActionParameterClass(){ 35 return ACTION_PARAMETER_CLASS; 36 } 37 38 public String getEditorClass(){ 39 return getActionState().isEnabled() 40 ? EDITOR_CLASS : EDITOR_DISABLED_CLASS; 41 } 42 43 public String getActionLinkClass(){ 44 return getActionState().isEnabled()? ACTION_LINK_CLASS : ""; 45 } 46 47 public String getActionLinkTextClass(){ 48 return getActionState().isEnabled()? "" : ACTION_LINK_DISABLED_CLASS; 49 } 50 51 public String getActionButtonClass(){ 52 return getActionState().isEnabled()? 53 ACTION_BUTTON_CLASS : ACTION_BUTTON_DISABLED_CLASS; 54 } 55 56 public String getAccessKey(){ 57 String accessKey = 58 getActionState().getActionDescriptor().getAccessKey(); 59 return accessKey==null? "": accessKey; 60 } 61 62 protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle) { 63 PageRenderSupport pageRenderSupport = 64 TapestryUtils.getPageRenderSupport(cycle, this); 65 getScript().execute(cycle, pageRenderSupport, null); 66 super.renderComponent(writer, cycle); 67 } 68 69 }