[jboss-cvs] jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit ...
Peter Muir
peter at bleepbleep.org.uk
Sun Nov 18 09:57:19 EST 2007
User: pmuir
Date: 07/11/18 09:57:19
Added: ui/src/main/java/org/jboss/seam/ui/renderkit
DefaultActionRendererBase.java
Log:
JBSEAM-1893
Revision Changes Path
1.1 date: 2007/11/18 14:57:19; author: pmuir; state: Exp;jboss-seam/ui/src/main/java/org/jboss/seam/ui/renderkit/DefaultActionRendererBase.java
Index: DefaultActionRendererBase.java
===================================================================
package org.jboss.seam.ui.renderkit;
import static org.jboss.seam.ui.util.HTML.SCRIPT_ELEM;
import static org.jboss.seam.ui.util.HTML.SCRIPT_LANGUAGE_ATTR;
import static org.jboss.seam.ui.util.HTML.SCRIPT_LANGUAGE_JAVASCRIPT;
import static org.jboss.seam.ui.util.HTML.SCRIPT_TYPE_ATTR;
import static org.jboss.seam.ui.util.HTML.SCRIPT_TYPE_TEXT_JAVASCRIPT;
import java.io.IOException;
import javax.faces.component.UIComponent;
import javax.faces.component.UIForm;
import javax.faces.component.UIOutput;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
import org.jboss.seam.ui.util.cdk.RendererBase;
/**
* @author Pete Muir
* @author sim
*
*/
public class DefaultActionRendererBase extends RendererBase
{
public static final String MARK = "org.jboss.seam.ui.DefaultAction";
private static LogProvider log = Logging.getLogProvider(DefaultActionRendererBase.class);
@Override
protected void doEncodeEnd(ResponseWriter writer, FacesContext context,
UIComponent component) throws IOException
{
UIComponent actionComponent = component.getParent();
String actionComponentId = actionComponent.getClientId(context);
UIForm form = getForm(actionComponent);
if (form != null)
{
String formId = form.getClientId(context);
writer.startElement(SCRIPT_ELEM, component);
writer.writeAttribute(SCRIPT_LANGUAGE_ATTR, SCRIPT_LANGUAGE_JAVASCRIPT, SCRIPT_LANGUAGE_ATTR);
writer.writeAttribute(SCRIPT_TYPE_ATTR, SCRIPT_TYPE_TEXT_JAVASCRIPT, SCRIPT_TYPE_ATTR);
if (actionComponent.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX))
{
log.warn("Must set an id for the default action source");
}
if (form.getAttributes().containsKey(MARK))
{
if (!form.getAttributes().get(MARK).equals(component.getClientId(context)))
{
log.warn("Can only specify one default action per form");
}
}
else
{
form.getAttributes().put(MARK, component.getClientId(context));
}
String functionBody =
"{var keycode;" +
"if (window.event) keycode = window.event.keyCode;" +
"else if (event) keycode = event.which;" +
"else return true;" +
"if (keycode == 13) " +
"{ document.getElementById('" + actionComponentId + "').click();return false; } " +
"else return true; }";
String functionCode =
"document.forms['" + formId + "'].onkeypress = " +
"new Function(\"event\", \"" + functionBody + "\");";
writer.write(functionCode);
writer.endElement("script");
}
}
private UIForm getForm(UIComponent component) {
while (component != null) {
if (component instanceof UIForm) {
break;
}
component = component.getParent();
}
return (UIForm) component;
}
@Override
protected Class getComponentClass()
{
return UIOutput.class;
}
}
More information about the jboss-cvs-commits
mailing list