You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/03/04 23:07:10 UTC
svn commit: r919200 - in /myfaces/extensions/scripting/trunk:
core/core/src/main/java/org/apache/myfaces/scripting/api/
core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/
examples/myfaces20-example...
Author: werpu
Date: Thu Mar 4 22:07:09 2010
New Revision: 919200
URL: http://svn.apache.org/viewvc?rev=919200&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-84
https://issues.apache.org/jira/browse/EXTSCRIPT-85
The dynamic system events now work like a breeze it needs a little bit further testing
but I guess it is time for another commit.
Added:
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java (with props)
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java (with props)
Modified:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistory.java
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistoryRenderer.java
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/complexBean.xhtml
myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java Thu Mar 4 22:07:09 2010
@@ -66,6 +66,7 @@
public static final int ARTIFACT_TYPE_RESPONSESTREAM = 19;
public static final int ARTIFACT_TYPE_RESOURCEHANDLER = 19;
public static final int ARTIFACT_TYPE_CLIENTBEHAVIORRENDERER = 20;
+ public static final int ARTIFACT_TYPE_SYSTEMEVENTLISTENER = 21;
public static final String CTX_REQUEST_CNT = "RequestCnt";
public static final String CTX_CONFIGURATION = "ExtScriptingConfig";
Modified: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java (original)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/ApplicationProxy.java Thu Mar 4 22:07:09 2010
@@ -20,7 +20,6 @@
import org.apache.myfaces.scripting.api.Decorated;
import org.apache.myfaces.scripting.api.ScriptingConst;
-import org.apache.myfaces.scripting.core.util.ReflectUtil;
import org.apache.myfaces.scripting.core.util.WeavingContext;
import org.apache.myfaces.scripting.jsf2.annotation.purged.*;
@@ -34,7 +33,6 @@
import javax.faces.el.*;
import javax.faces.event.*;
import javax.faces.validator.Validator;
-import java.lang.annotation.Annotation;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -59,7 +57,74 @@
* we have to do a double bookkeeping
* here
*/
- Map<String, String> _behaviors = new ConcurrentHashMap();
+ Map<String, String> _behaviors = new ConcurrentHashMap<String, String>();
+
+ /**
+ * special data structure to save our
+ * object -> proxy references
+ */
+ class EventHandlerProxyEntry {
+ Class event;
+ Decorated proxy;
+
+ EventHandlerProxyEntry(Class event, Decorated proxy) {
+ this.event = event;
+ this.proxy = proxy;
+ }
+
+ public Class getEvent() {
+ return event;
+ }
+
+ public void setEvent(Class event) {
+ this.event = event;
+ }
+
+ public Decorated getProxy() {
+ return proxy;
+ }
+
+ public void setProxy(Decorated proxy) {
+ this.proxy = proxy;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ EventHandlerProxyEntry that = (EventHandlerProxyEntry) o;
+
+ if (event != null ? !event.equals(that.event) : that.event != null) return false;
+ if (proxy != null ? !proxy.getDelegate().getClass().getName().equals(that.proxy.getDelegate().getClass().getName()) : that.proxy != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = event.hashCode();
+ result = 31 * result + proxy.getDelegate().getClass().getName().hashCode();
+ return result;
+ }
+ }
+
+ /**
+ * now at the first look this looks like a weird construct
+ * but the standard java set imposes this limit since
+ * we have to iterate over the entire set to reach the correct element
+ * the trick is to save the same object in as both key and value
+ * and now if we generate a new key on an object
+ * we can fetch our proxy which might already contain
+ * the same object in a refreshed state from the value
+ * part of the set, in our case
+ * using hashmaps should speed things up
+ * <p/>
+ * since we only have few write operations but access
+ * the map multithready we use concurrentHashMap here
+ */
+ Map<EventHandlerProxyEntry, EventHandlerProxyEntry> _eventHandlerIdx = new ConcurrentHashMap<EventHandlerProxyEntry, EventHandlerProxyEntry>();
public ApplicationProxy(Application delegate) {
_delegate = delegate;
@@ -653,25 +718,50 @@
@Override
public void subscribeToEvent(Class<? extends SystemEvent> eventClass, Class<?> aClass, SystemEventListener systemEventListener) {
weaveDelegate();
+ systemEventListener = makeEventProxy(eventClass, systemEventListener);
_delegate.subscribeToEvent(eventClass, aClass, systemEventListener);
}
+ private SystemEventListener makeEventProxy(Class<? extends SystemEvent> eventClass, SystemEventListener systemEventListener) {
+ if (WeavingContext.isDynamic(systemEventListener.getClass())) {
+ systemEventListener = new SystemEventListenerProxy(systemEventListener);
+ EventHandlerProxyEntry entry = new EventHandlerProxyEntry(eventClass, (Decorated) systemEventListener);
+ _eventHandlerIdx.put(entry, entry);
+ }
+ return systemEventListener;
+ }
+
@Override
- public void subscribeToEvent(Class<? extends SystemEvent> aClass, SystemEventListener systemEventListener) {
+ public void subscribeToEvent(Class<? extends SystemEvent> eventClass, SystemEventListener systemEventListener) {
weaveDelegate();
- _delegate.subscribeToEvent(aClass, systemEventListener);
+ systemEventListener = makeEventProxy(eventClass, systemEventListener);
+ _delegate.subscribeToEvent(eventClass, systemEventListener);
}
@Override
public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass, Class<?> aClass, SystemEventListener systemEventListener) {
weaveDelegate();
+ systemEventListener = resolveEventProxy(eventClass, systemEventListener);
_delegate.unsubscribeFromEvent(eventClass, aClass, systemEventListener);
}
+ private SystemEventListener resolveEventProxy(Class<? extends SystemEvent> eventClass, SystemEventListener systemEventListener) {
+ if (WeavingContext.isDynamic(systemEventListener.getClass())) {
+ systemEventListener = new SystemEventListenerProxy(systemEventListener);
+ EventHandlerProxyEntry entry = new EventHandlerProxyEntry(eventClass, (Decorated) systemEventListener);
+ entry = _eventHandlerIdx.remove(entry);
+ if (entry != null) {
+ systemEventListener = (SystemEventListener) entry.getProxy().getDelegate();
+ }
+ }
+ return systemEventListener;
+ }
+
@Override
- public void unsubscribeFromEvent(Class<? extends SystemEvent> aClass, SystemEventListener systemEventListener) {
+ public void unsubscribeFromEvent(Class<? extends SystemEvent> eventClass, SystemEventListener systemEventListener) {
weaveDelegate();
- _delegate.unsubscribeFromEvent(aClass, systemEventListener);
+ systemEventListener = resolveEventProxy(eventClass, systemEventListener);
+ _delegate.unsubscribeFromEvent(eventClass, systemEventListener);
}
public Object getDelegate() {
Added: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java?rev=919200&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java (added)
+++ myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java Thu Mar 4 22:07:09 2010
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.scripting.jsf.dynamicdecorators.implemetations;
+
+import org.apache.myfaces.scripting.api.Decorated;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+
+/**
+ * a method level reloading proxy class
+ * we do not use auto proxies here because
+ * this class needs special treatment
+ * over our decorated interface
+ *
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class SystemEventListenerProxy implements Decorated, SystemEventListener {
+
+ SystemEventListener _delegate;
+
+ public SystemEventListenerProxy(SystemEventListener delegate) {
+ _delegate = delegate;
+ }
+
+ public boolean isListenerForSource(Object source) {
+ weaveDelegate();
+ return _delegate.isListenerForSource(source);
+ }
+
+ public void processEvent(SystemEvent event) {
+ weaveDelegate();
+ _delegate.processEvent(event);
+ }
+
+ @Override
+ public Object getDelegate() {
+ return _delegate;
+ }
+
+ private void weaveDelegate() {
+ //TODO add a speed optimization here by pushing something in the request map
+ if (_delegate != null) {
+ _delegate = (SystemEventListener) WeavingContext.getWeaver().reloadScriptingInstance(_delegate, ScriptingConst.ARTIFACT_TYPE_SYSTEMEVENTLISTENER);
+ }
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/myfaces2-extensions/src/main/java/org/apache/myfaces/scripting/jsf/dynamicdecorators/implemetations/SystemEventListenerProxy.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/faces-config.xml Thu Mar 4 22:07:09 2010
@@ -67,7 +67,7 @@
</application>
-
+
<lifecycle>
<phase-listener>
@@ -114,4 +114,10 @@
<renderer-class>org.apache.myfaces.groovyloader.test.TestRenderer</renderer-class>
</renderer>
</render-kit>
+ <application>
+ <system-event-listener>
+ <system-event-listener-class>org.apache.myfaces.javaloader.eventTest.TestListener</system-event-listener-class>
+ <system-event-class>javax.faces.event.PreRenderViewEvent</system-event-class>
+ </system-event-listener>
+ </application>
</faces-config>
\ No newline at end of file
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistory.java?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistory.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistory.java Thu Mar 4 22:07:09 2010
@@ -21,13 +21,26 @@
import javax.faces.component.FacesComponent;
import javax.faces.component.UIOutput;
+import javax.faces.event.*;
+import java.util.logging.Logger;
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
*/
@FacesComponent("org.apache.myfaces.scripting.components.TaintHistory")
-public class TaintHistory extends UIOutput {
+@ListenersFor( value = {
+ @ListenerFor(systemEventClass = PostAddToViewEvent.class),
+ @ListenerFor(systemEventClass = PreRenderComponentEvent.class)
+ }
+)
+public class TaintHistory extends UIOutput implements ComponentSystemEventListener {
+ static Logger _log = Logger.getLogger(TaintHistory.class.getName());
+
+ public void processEvent(ComponentSystemEvent event) {
+ _log.info("processing event"+event.getClass().getName());
+ }
+
static final int DEFAULT_NO_ENTRIES = 10;
@@ -45,6 +58,7 @@
getStateHelper().put(PropertyKeys.noEntries, entries);
}
+
public int getNoEntries() {
Integer retVal = (Integer) getStateHelper().eval(PropertyKeys.noEntries);
if (retVal == null) {
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistoryRenderer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistoryRenderer.java?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistoryRenderer.java (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/componentTest/TaintHistoryRenderer.java Thu Mar 4 22:07:09 2010
@@ -29,6 +29,7 @@
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
+import javax.faces.event.*;
import javax.faces.render.FacesRenderer;
import java.io.IOException;
import java.text.DateFormat;
@@ -43,18 +44,18 @@
* @version $Revision$ $Date$
*/
@FacesRenderer(componentFamily = "javax.faces.Output", rendererType = "org.apache.myfaces.scripting.components.TaintHistoryRenderer")
-public class TaintHistoryRenderer extends HtmlTextRendererBase {
- static Logger _log = Logger.getLogger(JavaTestRenderer1.class.getName());
+public class TaintHistoryRenderer extends HtmlTextRendererBase {
+ static Logger _log = Logger.getLogger(TaintHistoryRenderer.class.getName());
- @Override
+
+ @Override
public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
super.encodeBegin(context, component);
ResponseWriter wrtr = FacesContext.getCurrentInstance().getResponseWriter();
startDiv(component, wrtr, "historyBox");
- int lastTainted = ((TaintHistory)component).getNoEntries();
-
+ int lastTainted = ((TaintHistory) component).getNoEntries();
Collection<ReloadingMetadata> result = WeavingContext.getRefreshContext().getLastTainted(lastTainted);
if (result == null || result.isEmpty()) {
@@ -70,10 +71,10 @@
private void writeHistory(UIComponent component, ResponseWriter wrtr, Collection<ReloadingMetadata> result) throws IOException {
startDiv(component, wrtr, "history");
- for(ReloadingMetadata entry: result) {
+ for (ReloadingMetadata entry : result) {
startDiv(component, wrtr, "line");
- writeDiv(component, wrtr, "timestamp", DateFormat.getInstance().format(new Date(entry.getTimestamp())));
- writeDiv(component, wrtr, "changedFile", entry.getFileName());
+ writeDiv(component, wrtr, "timestamp", DateFormat.getInstance().format(new Date(entry.getTimestamp())));
+ writeDiv(component, wrtr, "changedFile", entry.getFileName());
endDiv(wrtr);
}
Added: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java?rev=919200&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java (added)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java Thu Mar 4 22:07:09 2010
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.myfaces.javaloader.eventTest;
+
+import javax.faces.component.UIViewRoot;
+import javax.faces.event.PreRenderViewEvent;
+import javax.faces.event.SystemEvent;
+import javax.faces.event.SystemEventListener;
+import java.util.logging.Logger;
+
+/**
+ * @author Werner Punz (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
+
+public class TestListener implements SystemEventListener {
+ static final Logger _log = Logger.getLogger(Logger.class.getName());
+
+ @Override
+ public boolean isListenerForSource(Object source) {
+ return (source instanceof UIViewRoot);
+ }
+
+
+ @Override
+ public void processEvent(SystemEvent event) {
+ _log.info("Processing event from a dynamic class: "+event.toString());
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/WEB-INF/java/org/apache/myfaces/javaloader/eventTest/TestListener.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/complexBean.xhtml
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/complexBean.xhtml?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/complexBean.xhtml (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/complexBean.xhtml Thu Mar 4 22:07:09 2010
@@ -2,14 +2,15 @@
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html">
-<head>
+<h:head>
<title>Hello World</title>
-</head>
+</h:head>
<h:body>
<h1> this example tests complex bean relationships for refreshing</h1>
<h:form id="myForm">
+ <!--
<h:outputScript name="jsf.js" library="javax.faces" target="head"/>
@@ -21,6 +22,18 @@
<h:outputText value="#{receiver.myBean.hello}" />
<h:outputText value="#{receiver.myBean.secondaryBean.hello}" />
+ -->
+
+ <h:inputText value="#{myBean.test}">
+ <f:ajax render="myText" event="keyup"/>
+ </h:inputText>
+ <h:panelGroup id="myText">
+ <h:inputText value="#{myBean.test}" binding="#{myBean.bindingMyTest}"/>
+ <script type="text/javascript">
+ alert("hello");
+ </script>
+ </h:panelGroup>
+
</h:form>
Modified: myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css?rev=919200&r1=919199&r2=919200&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css (original)
+++ myfaces/extensions/scripting/trunk/examples/myfaces20-example/src/main/webapp/resources/styles/main.css Thu Mar 4 22:07:09 2010
@@ -88,6 +88,11 @@
/*==================================================
Basic CSS information for our
taint history component
+ we do not use the compound
+ css for error and history
+ for readability reasons
+ although we have load
+ of duplication here
====================================================*/
div.historyBox {
@@ -141,7 +146,6 @@
float: left;
}
-
/*==================================================
Basic CSS information for our compiler
output component