JBoss Rich Faces SVN: r1877 - in trunk: cdk/generator/src/main/resources/META-INF/templates12 and 4 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2007-07-26 18:05:11 -0400 (Thu, 26 Jul 2007)
New Revision: 1877
Added:
trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm
trunk/framework/test/src/test/java/org/ajax4jsf/application/
trunk/framework/test/src/test/java/org/ajax4jsf/application/AjaxStateManagerTest.java
trunk/framework/test/src/test/java/org/ajax4jsf/application/ComponentLoaderTest.java
Removed:
trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm
Modified:
trunk/cdk/generator/src/main/resources/META-INF/templates/faces-config.vm
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java
trunk/framework/impl/src/main/java/org/ajax4jsf/application/ComponentsLoaderImpl.java
trunk/samples/ajaxPortlet/pom.xml
Log:
Write Unit tests for a AjaxStateManager classes.
Fix AJSF-98, AJSF-99
Modified: trunk/cdk/generator/src/main/resources/META-INF/templates/faces-config.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates/faces-config.vm 2007-07-26 21:34:35 UTC (rev 1876)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates/faces-config.vm 2007-07-26 22:05:11 UTC (rev 1877)
@@ -7,8 +7,6 @@
#foreach( $validator in ${validators})
<validator>
- <validator-id>${validator.id}</validator-id>
- <validator-class>${validator.classname}</validator-class>
#if(${validator.description})
<description>${validator.description}</description>
#end
@@ -18,11 +16,22 @@
#if(${validator.icon})
<icon>${validator.icon}</icon>
#end
+ <validator-id>${validator.id}</validator-id>
+ <validator-class>${validator.classname}</validator-class>
</validator>
#end
#foreach( $converter in ${converters})
<converter>
+ #if(${converter.description})
+ <description>${converter.description}</description>
+ #end
+ #if(${converter.displayname})
+ <display-name>${converter.displayname}</display-name>
+ #end
+ #if(${converter.icon})
+ <icon>${converter.icon}</icon>
+ #end
#if(${converter.id})
<converter-id>${converter.id}</converter-id>
#end
@@ -32,15 +41,6 @@
<converter-class>${converter.classname}</converter-class>
- #if(${converter.description})
- <description>${converter.description}</description>
- #end
- #if(${converter.displayname})
- <display-name>${converter.displayname}</display-name>
- #end
- #if(${converter.icon})
- <icon>${converter.icon}</icon>
- #end
</converter>
#end
Deleted: trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm 2007-07-26 21:34:35 UTC (rev 1876)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm 2007-07-26 22:05:11 UTC (rev 1877)
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
- "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
-<faces-config>
-
-${facesConfig.includeContent}
-
-#foreach( $validator in ${validators})
- <validator>
- <validator-id>${validator.id}</validator-id>
- <validator-class>${validator.classname}</validator-class>
- #if(${validator.description})
- <description>${validator.description}</description>
- #end
- #if(${validator.displayname})
- <display-name>${validator.displayname}</display-name>
- #end
- #if(${validator.icon})
- <icon>${validator.icon}</icon>
- #end
- </validator>
-#end
-
-#foreach( $converter in ${converters})
- <converter>
- #if(${converter.id})
- <converter-id>${converter.id}</converter-id>
- #end
- #if(${converter.forclass})
- <converter-for-class>${converter.forclass}</converter-for-class>
- #end
-
- <converter-class>${converter.classname}</converter-class>
-
- #if(${converter.description})
- <description>${converter.description}</description>
- #end
- #if(${converter.displayname})
- <display-name>${converter.displayname}</display-name>
- #end
- #if(${converter.icon})
- <icon>${converter.icon}</icon>
- #end
- </converter>
-#end
-
-
-
-#foreach( $component in ${components})
-#if( $component.generate )
- <component>
- #if(${component.description})
- <description>${component.xmlEncodedDescription}</description>
- #end
- #if(${component.displayname})
- <display-name>${component.xmlEncodedDisplayname}</display-name>
- #end
- <component-type>${component.name}</component-type>
- <component-class>${component.classname}</component-class>
-
-#foreach( $facet in $component.facets)
- <facet>
- #if(${facet.description})
- <description>${facet.xmlEncodedDescription}</description>
- #end
- #if(${facet.displayname})
- <display-name>${facet.xmlEncodedDisplayname}</display-name>
- #end
- <facet-name>${facet.name}</facet-name>
- </facet>
-#end
- #if(${component.renderer})
- <component-extension>
- <component-family>${component.family}</component-family>
- <renderer-type>${component.renderer.name}</renderer-type>
- </component-extension>
- #end
- </component>
-#end
-#end
-
-#foreach( $renderkit in $facesConfig.renderKits)
- <render-kit>
- #if(${renderkit.renderkitid})
- <render-kit-id>${renderkit.renderkitid}</render-kit-id>
- #if(${renderkit.renderkitclass})
- <render-kit-class>${renderkit.renderkitclass}</render-kit-class>
- #end
- #end
-#foreach( $component in $components)
- #if($component.renderer)
- #set($rendererClass = $renderkit.rendererClass($component.renderer.classname) )
- #if( $component.renderer.generate || $facesConfig.rendererExists("${rendererClass}"))
- <renderer>
- <component-family>${component.family}</component-family>
- <renderer-type>
- ${component.renderer.name}
- </renderer-type>
- <renderer-class>
- ${rendererClass}
- </renderer-class>
- </renderer>
- #end
- #end
-#end
- </render-kit>
-#end
-
-
-</faces-config>
Added: trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm
===================================================================
--- trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm (rev 0)
+++ trunk/cdk/generator/src/main/resources/META-INF/templates12/faces-config.vm 2007-07-26 22:05:11 UTC (rev 1877)
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+ http://java.sun.com/xml/ns/javaee/
+ web-facesconfig_1_2.xsd"
+ version="1.2">
+${facesConfig.includeContent}
+
+#foreach( $validator in ${validators})
+ <validator>
+ #if(${validator.description})
+ <description>${validator.description}</description>
+ #end
+ #if(${validator.displayname})
+ <display-name>${validator.displayname}</display-name>
+ #end
+ #if(${validator.icon})
+ <icon>${validator.icon}</icon>
+ #end
+ <validator-id>${validator.id}</validator-id>
+ <validator-class>${validator.classname}</validator-class>
+ </validator>
+#end
+
+#foreach( $converter in ${converters})
+ <converter>
+ #if(${converter.description})
+ <description>${converter.description}</description>
+ #end
+ #if(${converter.displayname})
+ <display-name>${converter.displayname}</display-name>
+ #end
+ #if(${converter.icon})
+ <icon>${converter.icon}</icon>
+ #end
+ #if(${converter.id})
+ <converter-id>${converter.id}</converter-id>
+ #end
+ #if(${converter.forclass})
+ <converter-for-class>${converter.forclass}</converter-for-class>
+ #end
+
+ <converter-class>${converter.classname}</converter-class>
+
+ </converter>
+#end
+
+
+
+#foreach( $component in ${components})
+#if( $component.generate )
+ <component>
+ #if(${component.description})
+ <description>${component.xmlEncodedDescription}</description>
+ #end
+ #if(${component.displayname})
+ <display-name>${component.xmlEncodedDisplayname}</display-name>
+ #end
+ <component-type>${component.name}</component-type>
+ <component-class>${component.classname}</component-class>
+
+#foreach( $facet in $component.facets)
+ <facet>
+ #if(${facet.description})
+ <description>${facet.xmlEncodedDescription}</description>
+ #end
+ #if(${facet.displayname})
+ <display-name>${facet.xmlEncodedDisplayname}</display-name>
+ #end
+ <facet-name>${facet.name}</facet-name>
+ </facet>
+#end
+ #if(${component.renderer})
+ <component-extension>
+ <component-family>${component.family}</component-family>
+ <renderer-type>${component.renderer.name}</renderer-type>
+ </component-extension>
+ #end
+ </component>
+#end
+#end
+
+#foreach( $renderkit in $facesConfig.renderKits)
+ <render-kit>
+ #if(${renderkit.renderkitid})
+ <render-kit-id>${renderkit.renderkitid}</render-kit-id>
+ #if(${renderkit.renderkitclass})
+ <render-kit-class>${renderkit.renderkitclass}</render-kit-class>
+ #end
+ #end
+#foreach( $component in $components)
+ #if($component.renderer)
+ #set($rendererClass = $renderkit.rendererClass($component.renderer.classname) )
+ #if( $component.renderer.generate || $facesConfig.rendererExists("${rendererClass}"))
+ <renderer>
+ <component-family>${component.family}</component-family>
+ <renderer-type>
+ ${component.renderer.name}
+ </renderer-type>
+ <renderer-class>
+ ${rendererClass}
+ </renderer-class>
+ </renderer>
+ #end
+ #end
+#end
+ </render-kit>
+#end
+
+
+</faces-config>
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java 2007-07-26 21:34:35 UTC (rev 1876)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxStateManager.java 2007-07-26 22:05:11 UTC (rev 1877)
@@ -59,16 +59,21 @@
protected static final int DEFAULT_NUMBER_OF_VIEWS = 16;
private static final String VIEW_STATES_MAP = AjaxStateManager.class
- .getName()+".VIEW_STATES_MAP";
+ .getName()
+ + ".VIEW_STATES_MAP";
- private static final Object VIEW_SEQUENCE = AjaxStateManager.class.getName()+".VIEW_SEQUENCE";
+ private static final Object VIEW_SEQUENCE = AjaxStateManager.class
+ .getName()
+ + ".VIEW_SEQUENCE";
private final StateManager parent;
private final ComponentsLoader componentLoader;
-
- private int viewSequence=0;
-
+
+ private int viewSequence = 0;
+
+ private Object viewSequenceMutex = "MUTEX";
+
private static final Log _log = LogFactory.getLog(AjaxStateManager.class);
/**
@@ -129,7 +134,7 @@
public void writeState(FacesContext context, SerializedView state)
throws IOException {
parent.writeState(context, state);
- if(_log.isDebugEnabled()){
+ if (_log.isDebugEnabled()) {
_log.debug("Write view state to the response");
}
context.getExternalContext().getRequestMap().put(
@@ -155,8 +160,8 @@
// viewRoot = parent.restoreView(context, viewId, renderKitId);
state = responseStateManager.getComponentStateToRestore(context);
} else {
- Object[] serializedView = restoreStateFromSession(context,
- viewId, renderKitId);
+ Object[] serializedView = restoreStateFromSession(context, viewId,
+ renderKitId);
if (null != serializedView) {
treeStructure = (TreeStrutureNode) serializedView[0];
state = serializedView[1];
@@ -181,6 +186,9 @@
ExternalContext externalContext = context.getExternalContext();
Object session = externalContext.getSession(false);
if (null == session) {
+ if (_log.isDebugEnabled()) {
+ _log.debug("Can't restore view state : session expired");
+ }
} else {
synchronized (session) {
LRUMap viewStates = (LRUMap) externalContext.getSessionMap()
@@ -189,19 +197,31 @@
LRUMap logicalStates = (LRUMap) viewStates.get(viewId);
if (null != logicalStates) {
if (null != id) {
- restoredState = (Object[]) logicalStates
- .get(id);
- externalContext.getRequestMap().put(VIEW_SEQUENCE, id);
+ restoredState = (Object[]) logicalStates.get(id);
+ externalContext.getRequestMap().put(VIEW_SEQUENCE,
+ id);
if (null == restoredState) {
+ if (_log.isDebugEnabled()) {
+ _log.debug("No saved view state found for a Id "+id+". Restore last saved state");
+ }
restoredState = (Object[]) logicalStates
.get(logicalStates.firstKey());
}
} else {
+ if (_log.isDebugEnabled()) {
+ _log.debug("No version Id for a saved view state in request. Restore last saved state");
+ }
restoredState = (Object[]) logicalStates
.get(logicalStates.firstKey());
}
+ } else if (_log.isDebugEnabled()) {
+ _log.debug("Can't restore view state : no saved states for a ViewId "+viewId);
}
+
+ } else if (_log.isDebugEnabled()) {
+ _log.debug("Can't restore view state : no saved view states in session");
}
+
}
}
@@ -230,14 +250,16 @@
viewStates);
}
Object id = getNextViewId(context);
- LRUMap logicalViewsMap = (LRUMap) viewStates.get(viewRoot.getViewId());
- if(null == logicalViewsMap){
- logicalViewsMap = new LRUMap(getNumberOfViews(externalContext));
+ LRUMap logicalViewsMap = (LRUMap) viewStates.get(viewRoot
+ .getViewId());
+ if (null == logicalViewsMap) {
+ logicalViewsMap = new LRUMap(
+ getNumberOfViews(externalContext));
}
// Renew last seen view.
viewStates.put(viewRoot.getViewId(), logicalViewsMap);
- logicalViewsMap.put(id, new Object[]{treeState,state});
- serializedView = new SerializedView(id,null);
+ logicalViewsMap.put(id, new Object[] { treeState, state });
+ serializedView = new SerializedView(id, null);
}
}
@@ -247,16 +269,19 @@
protected Object getNextViewId(FacesContext context) {
AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- if(ajaxContext.isAjaxRequest(context)){
- Object id = context.getExternalContext().getRequestMap().get(VIEW_SEQUENCE);
- if(null != id){
+ if (ajaxContext.isAjaxRequest(context)) {
+ Object id = context.getExternalContext().getRequestMap().get(
+ VIEW_SEQUENCE);
+ if (null != id) {
return id;
}
}
- if (viewSequence++ == Character.MAX_VALUE) {
- viewSequence = 0;
- }
- return UIViewRoot.UNIQUE_ID_PREFIX + ((int) viewSequence);
+ synchronized (viewSequenceMutex ) {
+ if (viewSequence++ == Character.MAX_VALUE) {
+ viewSequence = 0;
+ }
+ return UIViewRoot.UNIQUE_ID_PREFIX + ((int) viewSequence);
+ }
}
protected int getNumberOfViews(ExternalContext externalContext) {
@@ -278,7 +303,7 @@
* TODO - implement Externalizable to reduce serialized state.
*/
private static final long serialVersionUID = -9038742487716977254L;
-
+
private static final String NULL_ID = "";
private Map facets = null;
@@ -289,6 +314,9 @@
private String id;
+ public TreeStrutureNode() {
+ }
+
public void apply(FacesContext context, UIComponent component,
Set uniqueIds) {
type = component.getClass().getName();
@@ -351,17 +379,77 @@
return component;
}
+ /**
+ * @return the facets
+ */
+ public Map getFacets() {
+ return facets;
+ }
+
+ /**
+ * @param facets
+ * the facets to set
+ */
+ public void setFacets(Map facets) {
+ this.facets = facets;
+ }
+
+ /**
+ * @return the children
+ */
+ public List getChildren() {
+ return children;
+ }
+
+ /**
+ * @param children
+ * the children to set
+ */
+ public void setChildren(List children) {
+ this.children = children;
+ }
+
+ /**
+ * @return the type
+ */
+ public String getType() {
+ return type;
+ }
+
+ /**
+ * @param type
+ * the type to set
+ */
+ public void setType(String type) {
+ this.type = type;
+ }
+
+ /**
+ * @return the id
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * @param id
+ * the id to set
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
type = in.readUTF();
id = in.readUTF();
- if(NULL_ID.equals(id)){
+ if (NULL_ID.equals(id)) {
id = null;
}
int facetsSize = in.readInt();
- if (facetsSize >0) {
+ if (facetsSize > 0) {
facets = new HashMap(facetsSize);
- for(int i=0;i<facetsSize;i++){
+ for (int i = 0; i < facetsSize; i++) {
String facetName = in.readUTF();
TreeStrutureNode facet = new TreeStrutureNode();
facet.readExternal(in);
@@ -369,9 +457,9 @@
}
}
int childrenSize = in.readInt();
- if (childrenSize>0) {
+ if (childrenSize > 0) {
children = new ArrayList(childrenSize);
- for(int i=0;i<childrenSize;i++){
+ for (int i = 0; i < childrenSize; i++) {
TreeStrutureNode child = new TreeStrutureNode();
child.readExternal(in);
children.add(child);
@@ -381,18 +469,28 @@
public void writeExternal(ObjectOutput out) throws IOException {
out.writeUTF(type);
- out.writeUTF(null == id?NULL_ID:id);
- out.writeInt(facets.size());
- for (Iterator i = facets.entrySet().iterator(); i.hasNext();) {
- Map.Entry entry = (Map.Entry) i.next();
- out.writeUTF((String) entry.getKey());
- TreeStrutureNode node = (TreeStrutureNode) entry.getValue();
- node.writeExternal(out);
+ out.writeUTF(null == id ? NULL_ID : id);
+ if (null != facets) {
+ out.writeInt(facets.size());
+ for (Iterator i = facets.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ out.writeUTF((String) entry.getKey());
+ TreeStrutureNode node = (TreeStrutureNode) entry.getValue();
+ node.writeExternal(out);
+ }
+
+ } else {
+ out.writeInt(0);
}
- out.writeInt(children.size());
- for (Iterator i = children.iterator(); i.hasNext();) {
- TreeStrutureNode child = (TreeStrutureNode) i.next();
- child.writeExternal(out);
+ if (null != children) {
+ out.writeInt(children.size());
+ for (Iterator i = children.iterator(); i.hasNext();) {
+ TreeStrutureNode child = (TreeStrutureNode) i.next();
+ child.writeExternal(out);
+ }
+
+ } else {
+ out.writeInt(0);
}
}
}
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/application/ComponentsLoaderImpl.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/application/ComponentsLoaderImpl.java 2007-07-26 21:34:35 UTC (rev 1876)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/application/ComponentsLoaderImpl.java 2007-07-26 22:05:11 UTC (rev 1877)
@@ -68,7 +68,7 @@
* lazy create ClassLoader instance.
* @return
*/
- private ClassLoader getClassLoader() {
+ protected synchronized ClassLoader getClassLoader() {
if (loader == null) {
loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
Added: trunk/framework/test/src/test/java/org/ajax4jsf/application/AjaxStateManagerTest.java
===================================================================
--- trunk/framework/test/src/test/java/org/ajax4jsf/application/AjaxStateManagerTest.java (rev 0)
+++ trunk/framework/test/src/test/java/org/ajax4jsf/application/AjaxStateManagerTest.java 2007-07-26 22:05:11 UTC (rev 1877)
@@ -0,0 +1,154 @@
+/**
+ *
+ */
+package org.ajax4jsf.application;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.HashSet;
+
+import javax.faces.application.StateManager;
+import javax.faces.component.UIColumn;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIData;
+import javax.faces.component.UIInput;
+import javax.faces.component.UIOutput;
+import javax.faces.component.UIViewRoot;
+import javax.faces.render.RenderKit;
+import javax.faces.render.RenderKitFactory;
+
+import org.ajax4jsf.application.AjaxStateManager.TreeStrutureNode;
+import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
+
+import com.sun.media.sound.AlawCodec;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class AjaxStateManagerTest extends AbstractAjax4JsfTestCase {
+
+ private static final String FACET_B = "facetB";
+ private static final String FACET_A = "facetA";
+
+ /**
+ * @param name
+ */
+ public AjaxStateManagerTest(String name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#setUp()
+ */
+ public void setUp() throws Exception {
+ super.setUp();
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#tearDown()
+ */
+ public void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.AjaxStateManager#restoreStateFromSession(javax.faces.context.FacesContext, java.lang.String, java.lang.String)}.
+ */
+ public void testRestoreStateFromSession() {
+// fail("Not yet implemented");
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.AjaxStateManager#getNextViewId(javax.faces.context.FacesContext)}.
+ */
+ public void testGetNextViewId() {
+// fail("Not yet implemented");
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.AjaxStateManager#getNumberOfViews(javax.faces.context.ExternalContext)}.
+ */
+ public void testGetNumberOfViews() {
+// fail("Not yet implemented");
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.AjaxStateManager#getRenderKit(javax.faces.context.FacesContext, java.lang.String)}.
+ */
+ public void testGetRenderKit() {
+ AjaxStateManager stateManager = getAjaxStateManager();
+ RenderKit kit = stateManager.getRenderKit(facesContext, RenderKitFactory.HTML_BASIC_RENDER_KIT);
+ assertSame(renderKit, kit);
+ }
+
+ public void testTreeNodeApply() throws Exception {
+ buildTestTree();
+ TreeStrutureNode node = new TreeStrutureNode();
+ node.apply(facesContext, facesContext.getViewRoot(), new HashSet<String>());
+ assertEquals(2, node.getChildren().size());
+ assertEquals(1, node.getFacets().size());
+ TreeStrutureNode nodeA = (TreeStrutureNode) node.getFacets().get(FACET_A);
+ assertNotNull(nodeA);
+ assertEquals(1, nodeA.getChildren().size());
+ assertEquals(1, nodeA.getFacets().size());
+ }
+
+ public void testTreeNodeCheckUniqueId() throws Exception {
+ buildTestTree();
+ TreeStrutureNode node = new TreeStrutureNode();
+ UIViewRoot viewRoot = facesContext.getViewRoot();
+ ((UIComponent)viewRoot.getChildren().get(0)).setId(FACET_A);
+ ((UIComponent)viewRoot.getChildren().get(1)).setId(FACET_A);
+ try {
+ node.apply(facesContext, facesContext.getViewRoot(), new HashSet<String>());
+ } catch (IllegalStateException e) {
+ assertTrue(e.getMessage().startsWith("duplicate"));
+ return;
+ }
+ assertTrue("Duplicate components Id's not detected ",false);
+ }
+
+
+ public void testTreeNodeSerialisation() throws Exception {
+ buildTestTree();
+ TreeStrutureNode node = new TreeStrutureNode();
+ node.apply(facesContext, facesContext.getViewRoot(), new HashSet<String>());
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ ObjectOutputStream out = new ObjectOutputStream(byteOut);
+ out.writeObject(node);
+ ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
+ ObjectInputStream in = new ObjectInputStream(byteIn);
+ TreeStrutureNode nodeIn = (TreeStrutureNode) in.readObject();
+ assertEquals(2, nodeIn.getChildren().size());
+ assertEquals(1, nodeIn.getFacets().size());
+ TreeStrutureNode nodeA = (TreeStrutureNode) nodeIn.getFacets().get(FACET_A);
+ assertNotNull(nodeA);
+ assertEquals(1, nodeA.getChildren().size());
+ assertEquals(1, nodeA.getFacets().size());
+
+ }
+ /**
+ *
+ */
+ private void buildTestTree() {
+ facesContext.getViewRoot().getChildren().add(new UIInput());
+ facesContext.getViewRoot().getChildren().add(new UIOutput());
+ UIData data = new UIData();
+ facesContext.getViewRoot().getFacets().put(FACET_A, data);
+ data.getChildren().add(new UIColumn());
+ data.getFacets().put(FACET_B, new UIOutput());
+ }
+
+ /**
+ * @return
+ */
+ private AjaxStateManager getAjaxStateManager() {
+ StateManager defaultStateManager = application.getStateManager();
+ AjaxStateManager stateManager = new AjaxStateManager(defaultStateManager);
+ return stateManager;
+ }
+
+}
Property changes on: trunk/framework/test/src/test/java/org/ajax4jsf/application/AjaxStateManagerTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/framework/test/src/test/java/org/ajax4jsf/application/ComponentLoaderTest.java
===================================================================
--- trunk/framework/test/src/test/java/org/ajax4jsf/application/ComponentLoaderTest.java (rev 0)
+++ trunk/framework/test/src/test/java/org/ajax4jsf/application/ComponentLoaderTest.java 2007-07-26 22:05:11 UTC (rev 1877)
@@ -0,0 +1,67 @@
+/**
+ *
+ */
+package org.ajax4jsf.application;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+
+import junit.framework.TestCase;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class ComponentLoaderTest extends TestCase {
+
+ private ComponentsLoaderImpl loader;
+ private ClassLoader contextClassLoader;
+ private URLClassLoader classLoader;
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ contextClassLoader = Thread.currentThread().getContextClassLoader();
+ classLoader = new URLClassLoader(new URL[0],
+ this.getClass().getClassLoader());
+ Thread.currentThread().setContextClassLoader(classLoader);
+ loader = new ComponentsLoaderImpl();
+ }
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ loader = null;
+ Thread.currentThread().setContextClassLoader(contextClassLoader);
+ contextClassLoader = null;
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.ComponentsLoaderImpl#createComponent(java.lang.String)}.
+ */
+ public void testCreateComponent() {
+ UIComponent input = loader.createComponent(UIInput.class.getName());
+ assertNotNull(input);
+ assertEquals(UIInput.class, input.getClass());
+ }
+
+ /**
+ * Test method for {@link org.ajax4jsf.application.ComponentsLoaderImpl#transform(java.lang.Object)}.
+ */
+ public void testTransform() {
+ Object componentClass = loader.transform(UIInput.class.getName());
+ assertSame(UIInput.class, componentClass);
+
+ }
+
+ public void testGetLoader() throws Exception {
+ assertSame(classLoader,loader.getClassLoader());
+ }
+}
Property changes on: trunk/framework/test/src/test/java/org/ajax4jsf/application/ComponentLoaderTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/samples/ajaxPortlet/pom.xml
===================================================================
--- trunk/samples/ajaxPortlet/pom.xml 2007-07-26 21:34:35 UTC (rev 1876)
+++ trunk/samples/ajaxPortlet/pom.xml 2007-07-26 22:05:11 UTC (rev 1877)
@@ -8,7 +8,7 @@
<version>3.1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <groupId>org.richfaces</groupId>
+ <groupId>org.richfaces.samples</groupId>
<artifactId>portalAjaxSample</artifactId>
<version>3.1.0-SNAPSHOT</version>
<packaging>war</packaging>
17 years, 5 months
JBoss Rich Faces SVN: r1876 - in trunk/samples/richfaces-demo/src/main/webapp/richfaces: commandLink and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: SergeySmirnov
Date: 2007-07-26 17:34:35 -0400 (Thu, 26 Jul 2007)
New Revision: 1876
Added:
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink.xhtml
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.html
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.xhtml
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/usage.xhtml
Log:
demo updates
Added: trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.html
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.html (rev 0)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.html 2007-07-26 21:34:35 UTC (rev 1876)
@@ -0,0 +1 @@
+TODO: source should be added
\ No newline at end of file
Added: trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.xhtml (rev 0)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/source/usage.xhtml 2007-07-26 21:34:35 UTC (rev 1876)
@@ -0,0 +1 @@
+x
\ No newline at end of file
Added: trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/usage.xhtml (rev 0)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink/usage.xhtml 2007-07-26 21:34:35 UTC (rev 1876)
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "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:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:a4j="http://richfaces.org/ajax"
+ xmlns:rich="http://richfaces.ajax4jsf.org/rich">
+ <ui:composition template="/templates/component-sample.xhtml">
+ <ui:define name="sample">
+
+ <p>
+ a4j:commandLink is similar to the standard h:commandLink, but produces an
+ Ajax request with further partial page update. 'reRender' attribute point to the
+ component(s) that should be re-rendered in the component tree and updated
+ in the browser DOM after the ajax response is complete.
+ </p>
+
+ <p>
+ The following example shows how the greeting message is shown on the screen
+ without refreshing the entire page:
+ </p>
+
+ <div class="sample-container" >
+ <rich:separator width="1" />
+
+ <a4j:form>
+ <h:panelGrid columns="3">
+ <h:outputText value="Name:" />
+ <h:inputText value="#{userBean.name}" />
+ <a4j:commandLink reRender="out">
+ <h:outputText value="Say Hello" />
+ </a4j:commandLink>
+ </h:panelGrid>
+ </a4j:form>
+ <h:panelGroup id="out">
+ <h:outputText value="Hello " rendered="#{not empty userBean.name}" />
+ <h:outputText value="#{userBean.name}" />
+ <h:outputText value="!" rendered="#{not empty userBean.name}" />
+ </h:panelGroup>
+
+ <rich:separator width="1" style="padding-top:10px" />
+ </div>
+ <p>
+ For additional information about attributes of this compponent read
+ <h:outputLink value="#{facesContext.externalContext.requestContextPath}/richfaces/ajaxAttributes.jsf?c=ajaxattributes">
+ <h:outputText value="'Ajax Attribute' section" />
+ </h:outputLink>.
+ </p>
+
+ </ui:define>
+ <ui:define name="sources">
+ Here is a fragment of page sources for the given example:
+ <iframe src="${facesContext.externalContext.requestContextPath}/richfaces/commandButton/source/usage.html" class="source_frame"/>
+ </ui:define>
+ </ui:composition>
+</html>
Added: trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink.xhtml (rev 0)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandLink.xhtml 2007-07-26 21:34:35 UTC (rev 1876)
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "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:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:rich="http://richfaces.ajax4jsf.org/rich">
+<ui:composition template="/templates/main.xhtml">
+ <ui:define name="title">RichFaces - Open Source Rich JSF Components - Ajax Form</ui:define>
+ <ui:define name="body">
+ <rich:tabPanel switchType="server" value="#{componentNavigator.activeTab}" styleClass="top_tab" contentClass="content_tab" inactiveTabClass="inactive_tab" activeTabClass="active_tab">
+ <rich:tab label="Usage">
+ <ui:include src="/richfaces/commandLink/usage.xhtml"/>
+ </rich:tab>
+ </rich:tabPanel>
+ </ui:define>
+</ui:composition>
+</html>
17 years, 5 months
JBoss Rich Faces SVN: r1875 - in trunk/samples/richfaces-demo/src/main: webapp/richfaces/commandButton and 2 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: SergeySmirnov
Date: 2007-07-26 17:33:54 -0400 (Thu, 26 Jul 2007)
New Revision: 1875
Modified:
trunk/samples/richfaces-demo/src/main/resources/org/richfaces/demo/common/components.properties
trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandButton/usage.xhtml
trunk/samples/richfaces-demo/src/main/webapp/richfaces/form/usage.xhtml
trunk/samples/richfaces-demo/src/main/webapp/richfaces/support/usage.xhtml
Log:
demo updates
Modified: trunk/samples/richfaces-demo/src/main/resources/org/richfaces/demo/common/components.properties
===================================================================
--- trunk/samples/richfaces-demo/src/main/resources/org/richfaces/demo/common/components.properties 2007-07-26 19:40:32 UTC (rev 1874)
+++ trunk/samples/richfaces-demo/src/main/resources/org/richfaces/demo/common/components.properties 2007-07-26 21:33:54 UTC (rev 1875)
@@ -33,18 +33,18 @@
menuGroup= richMenu, Menu Group, /images/ico_dropDownMenu.gif, /images/cn_DropDownMenu.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/dropDownMenu.jsf
menuItem= richMenu, Menu Item, /images/ico_dropDownMenu.gif, /images/cn_DropDownMenu.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/dropDownMenu.jsf
menuSeparator= richMenu, Menu Separator, /images/ico_dropDownMenu.gif, /images/cn_DropDownMenu.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/dropDownMenu.jsf
-ajaxattributes= ajaxSupport, Ajax Attributes, /images/ico_ajaxAttributes.gif, /images/cn_ajaxAttributes.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/ajaxAttributes.jsf
-actionparam= ajaxSupport, Action Parameter, /images/ico_actionparam.gif, /images/cn_actionParameter.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/actionparam.jsf
-commandButton= ajaxSupport, Command Button, /images/ico_commandButton.gif, /images/cn_commandButton.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/commandButton.jsf
-commandLink= ajaxSupport, Command Link, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
-form= ajaxSupport, Ajax Form, /images/ico_form.gif, /images/cn_ajaxForm.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/form.jsf
-support= ajaxSupport, Ajax Support, /images/ico_support.gif, /images/cn_ajaxSupport.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/support.jsf
+ajaxattributes= ajaxSupport, Ajax Attributes, /images/ico_common.gif, /images/cn_ajaxAttributes.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/ajaxAttributes.jsf
+actionparam= ajaxSupport, Action Parameter, /images/ico_common.gif, /images/cn_actionParameter.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/actionparam.jsf
+commandButton= ajaxSupport, Command Button, /images/ico_common.gif, /images/cn_commandButton.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/commandButton.jsf
+commandLink= ajaxSupport, Command Link, /images/ico_common.gif, /images/cn_commandLink.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/commandLink.jsf
+form= ajaxSupport, Ajax Form, /images/ico_common.gif, /images/cn_ajaxForm.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/form.jsf
+support= ajaxSupport, Ajax Support, /images/ico_common.gif, /images/cn_ajaxSupport.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/support.jsf
jsFunction= ajaxSupport, JavaScript Function, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
poll= ajaxSupport, Poll, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
push= ajaxSupport, Push, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
status= ajaxSupport, Status, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
ajaxListener= ajaxSupport, Ajax Listener, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
-region= ajaxSupport, Ajax Region, /images/ico_region.gif, /images/cn_ajaxRegion.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/region.jsf
+region= ajaxSupport, Ajax Region, /images/ico_common.gif, /images/cn_ajaxRegion.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/region.jsf
loadBundle= ajaxResources, Bundle, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
loadScript= ajaxResources, Script, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
loadStyle= ajaxResources, Style, /images/ico_common.gif, /images/cn_common.gif, http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone..., /richfaces/panel.jsf
Modified: trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandButton/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandButton/usage.xhtml 2007-07-26 19:40:32 UTC (rev 1874)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/commandButton/usage.xhtml 2007-07-26 21:33:54 UTC (rev 1875)
@@ -38,8 +38,13 @@
<rich:separator width="1" style="padding-top:10px" />
</div>
+ <p>
+ For additional information about attributes of this compponent read
+ <h:outputLink value="#{facesContext.externalContext.requestContextPath}/richfaces/ajaxAttributes.jsf?c=ajaxattributes">
+ <h:outputText value="'Ajax Attribute' section" />
+ </h:outputLink>.
+ </p>
-
</ui:define>
<ui:define name="sources">
Here is a fragment of page sources for the given example:
Modified: trunk/samples/richfaces-demo/src/main/webapp/richfaces/form/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/form/usage.xhtml 2007-07-26 19:40:32 UTC (rev 1874)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/form/usage.xhtml 2007-07-26 21:33:54 UTC (rev 1875)
@@ -8,7 +8,7 @@
<ui:composition template="/templates/component-sample.xhtml">
<ui:define name="sample">
- <style>
+ <style type="text/css">
input[type="button"], input[type="submit"] {
background-color:#{a4jSkin.trimColor};
}
@@ -46,7 +46,7 @@
</pre>
</p>
<p>
- When ajaxSubmit"true", all included in the form non-ajax control becomes ajaxable. This
+ When ajaxSubmit="true", all included in the form non-ajax control becomes ajaxable. This
approach is similar to the one AjaxAnywhere framework uses. If form works in ajax mode,
the standard ajax attribute such as reRender, eventQueue, requestDelay can be used. The
following example demonstate the difference between partial and full-page refreshing.
@@ -91,7 +91,12 @@
Also, due to the security reason, uploadFile form element cannot be convertable to
the be ajaxable.
</p>
-
+ <p>
+ For additional information about attributes of this compponent read
+ <h:outputLink value="#{facesContext.externalContext.requestContextPath}/richfaces/ajaxAttributes.jsf?c=ajaxattributes">
+ <h:outputText value="'Ajax Attribute' section" />
+ </h:outputLink>.
+ </p>
</ui:define>
<ui:define name="sources">
Here is a fragment of page sources for the given example:
Modified: trunk/samples/richfaces-demo/src/main/webapp/richfaces/support/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/support/usage.xhtml 2007-07-26 19:40:32 UTC (rev 1874)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/support/usage.xhtml 2007-07-26 21:33:54 UTC (rev 1875)
@@ -14,12 +14,16 @@
are based on the same principles a4j:support has.
</p>
<p> a4j:support should be attached a direct child of the JSF component that has to be ajaxified.
- The key attributes are 'event' and 'reRender'. 'event' attribute defines the javascript
- event the ajax support will be attached at. 'reRender' attribute points to the JSF
- component(s) that should be re-rendered on the server side and updated on the
- client when ajax response come back.
+ The key attributes are 'event' and 'reRender'.
</p>
<p>
+ <b>event</b> attribute defines the javascript event the ajax support will be attached at.
+ </p>
+ <p>
+ 'reRender' attribute points to the JSF component(s) that should be re-rendered on the server side
+ and updated on the client when ajax response come back.
+ </p>
+ <p>
The following example shows how the outputText component value is changed while user is
typing in the input field:
</p>
@@ -45,18 +49,19 @@
on the client side is not supported.
</p>
+
<p>
- reRender attribute allows to use JSF EL expression as value. So, you can create
- a list dynamically deciding what should be re-rendered as a result of ajax request.
- </p>
-
- <p>
In case of attaching a4j:support to non-Ajax JSF command component, such as h:commandButton
or h:commandLink, it is important to set disableDefault equals true. Otherwise, non-ajax
request will be send just after ajax request and the page will be unexpectedly refreshed.
</p>
-
+ <p>
+ For additional information about attributes of this compponent read
+ <h:outputLink value="#{facesContext.externalContext.requestContextPath}/richfaces/ajaxAttributes.jsf?c=ajaxattributes">
+ <h:outputText value="'Ajax Attribute' section" />
+ </h:outputLink>.
+ </p>
</ui:define>
17 years, 5 months
JBoss Rich Faces SVN: r1874 - trunk/samples/richfaces-demo/src/main/webapp/richfaces/ajaxAttributes.
by richfaces-svn-commits@lists.jboss.org
Author: SergeySmirnov
Date: 2007-07-26 15:40:32 -0400 (Thu, 26 Jul 2007)
New Revision: 1874
Modified:
trunk/samples/richfaces-demo/src/main/webapp/richfaces/ajaxAttributes/usage.xhtml
Log:
ajax attributes complete
Modified: trunk/samples/richfaces-demo/src/main/webapp/richfaces/ajaxAttributes/usage.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/ajaxAttributes/usage.xhtml 2007-07-26 17:10:20 UTC (rev 1873)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/ajaxAttributes/usage.xhtml 2007-07-26 19:40:32 UTC (rev 1874)
@@ -206,12 +206,51 @@
</ol>
<h1 class="hsample">Javascript Interactions</h1>
<p>
-
- </p>
+ RichFaces allows to write Ajax-enabled JSF application without using Javascript hard.
+ However, you can still invoke the javascript code if you need. There are several ajax
+ attributes that helps to do it.
+ </p>
+ <p>
+ <b>onsubmit</b> attribute allows to invoke javascript code before the Ajax request is
+ sent. If 'onsubmit' returns false, the Ajax request is canceled. The code of 'onsubmit'
+ is inserter before the RichFaces Ajax call. So, the 'onsubmit' should not has a 'return'
+ statment is you want the Ajax request to be send. if you are going to invoke a javscript
+ function that return true or false, use the conditional statment to return something only
+ in you need to cancel the request. For example, onsubmit="if (mynosendfunct()==false){return false}".
+ </p>
+ <p>
+ <b>onclick</b> attribute is similar to the 'onsubmit', but for clickable components such
+ as a4j:commandLink and a4j:commandButton. If it returns false, the Ajax request is canceled also.
+ </p>
+ <p>
+ <b>oncomplete</b> attribute allows to invoke the javascript code right after the
+ Ajax response is returned back and the DOM tree of the browser is updated. Richfaces
+ register the code for further invocation to XMLHTTP request object before the Ajax
+ request is send. This means the code will not be changed during processing
+ the request on the server if you use JSF EL value binding. Also, you cannot use
+ 'this' inside the code, because it will not point the component where Ajax request
+ was initiated.
+ </p>
+ <p>
+ <b>data</b> attribute allows to get the additional data from the server during the
+ Ajax call. You can use JSF EL to point the property of the managed bean and its value
+ will be serialized in JSON format and be available on the client side. You can refer
+ to it using the 'data' variable. For example:
+ </p>
+ <div class="esample">
+ <pre>
+ <a4j:commandButton value="Update" data="<span>#</span>{userBean.name}" oncomplete="showTheName(data.name)" />
+</h:inputText>
+ </pre>
+ </div>
+ <p>
+ Richfaces allows to serialize into JSON format not only primitive types, but complex
+ type including arrays and collections. The beans should be serializable to be refered
+ with 'data'.
+ </p>
-
- </ui:define>
+ </ui:define>
<ui:define name="sources">
<span style="display:none"/>
</ui:define>
17 years, 5 months
JBoss Rich Faces SVN: r1873 - trunk/ui/tree/src/main/java/org/richfaces/renderkit.
by richfaces-svn-commits@lists.jboss.org
Author: sergeyhalipov
Date: 2007-07-26 13:10:20 -0400 (Thu, 26 Jul 2007)
New Revision: 1873
Modified:
trunk/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
Log:
Fix advisors when tree is rendered the first time.
Modified: trunk/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java
===================================================================
--- trunk/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-07-26 16:41:30 UTC (rev 1872)
+++ trunk/ui/tree/src/main/java/org/richfaces/renderkit/TreeRendererBase.java 2007-07-26 17:10:20 UTC (rev 1873)
@@ -165,10 +165,9 @@
public void process(FacesContext context, Object rowKey, Object argument)
throws IOException {
-
- navigator.followRowKey(context, (TreeRowKey) rowKey);
-
processAdvisors(context, (TreeRowKey)rowKey);
+
+ navigator.followRowKey(context, (TreeRowKey) rowKey);
if (!flag.isFlagSet()) {
closeLevelDownTable(context, tree, writer);
17 years, 5 months
JBoss Rich Faces SVN: r1872 - in trunk: sandbox/samples/calendar-sample/src/main/webapp/pages and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2007-07-26 12:41:30 -0400 (Thu, 26 Jul 2007)
New Revision: 1872
Modified:
trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js
trunk/sandbox/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp
trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
Log:
Modified: trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js 2007-07-26 16:21:22 UTC (rev 1871)
+++ trunk/framework/impl/src/main/resources/org/richfaces/renderkit/html/scripts/utils.js 2007-07-26 16:41:30 UTC (rev 1872)
@@ -156,3 +156,5 @@
element = element.parentNode;
}
}
+
+Richfaces.browser={isIE6: /MSIE\s*[6][\d,\.]+;/.test(navigator.userAgent)};
\ No newline at end of file
Modified: trunk/sandbox/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp
===================================================================
--- trunk/sandbox/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp 2007-07-26 16:21:22 UTC (rev 1871)
+++ trunk/sandbox/samples/calendar-sample/src/main/webapp/pages/Calendar.jsp 2007-07-26 16:41:30 UTC (rev 1872)
@@ -84,6 +84,7 @@
<f:selectItem itemLabel="bottom-left" itemValue="bottom-left"/>
<f:selectItem itemLabel="top-right" itemValue="top-right"/>
<f:selectItem itemLabel="top-left" itemValue="top-left"/>
+ <f:selectItem itemLabel="auto" itemValue="auto"/>
</h:selectOneRadio>
<h:commandButton id="calendarPopup" type="button" value="popup" onclick="$(this.form.id+':calendar').component.doSwitch();"/>
Modified: trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js
===================================================================
--- trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-07-26 16:21:22 UTC (rev 1871)
+++ trunk/sandbox/ui/calendar/src/main/resources/org/richfaces/renderkit/html/scripts/calendar.js 2007-07-26 16:41:30 UTC (rev 1872)
@@ -3,15 +3,16 @@
}
if (!Richfaces) Richfaces={};
-Richfaces.Calendar={};
+Richfaces.Calendar={};
Richfaces.Calendar.setElementPosition = function(element, baseElement, jointPoint, direction, offset)
{
// parameters:
// jointPoint: {x:,y:} or ('left-top','right-top','left-bottom','right-bottom')
// direction: ('left-top','right-top','left-bottom','right-bottom', 'auto')
- var elementDim = {width: element.getWidth(), height: element.getHeight()};
- var baseElementDim = {width: baseElement.getWidth(), height: baseElement.getHeight()};
+ var elementDim = Richfaces.Calendar.getOffsetDimensions(element);
+ var baseElementDim = Richfaces.Calendar.getOffsetDimensions(baseElement);
+
var windowRect = Richfaces.Calendar.getWindowViewport();
var baseOffset = Position.cumulativeOffset(baseElement);
@@ -90,6 +91,30 @@
element.style.top = oy + 'px';
}
+Richfaces.Calendar.getOffsetDimensions = function(element) {
+ // from prototype 1.5.0 // Pavel Yascenko
+ element = $(element);
+ var display = $(element).getStyle('display');
+ if (display != 'none' && display != null) // Safari bug
+ return {width: element.offsetWidth, height: element.offsetHeight};
+
+ // All *Width and *Height properties give 0 on elements with display none,
+ // so enable the element temporarily
+ var els = element.style;
+ var originalVisibility = els.visibility;
+ var originalPosition = els.position;
+ var originalDisplay = els.display;
+ els.visibility = 'hidden';
+ els.position = 'absolute';
+ els.display = 'block';
+ var originalWidth = element.offsetWidth; // was element.clientWidth // Pavel Yascenko
+ var originalHeight = element.offsetHeight; // was element.clientHeight // Pavel Yascenko
+ els.display = originalDisplay;
+ els.position = originalPosition;
+ els.visibility = originalVisibility;
+ return {width: originalWidth, height: originalHeight};
+}
+
Richfaces.Calendar.checkCollision = function(elementRect, windowRect, windowOffset)
{
if (elementRect.left >= windowRect.left &&
@@ -327,12 +352,15 @@
this.POPUP_ID = this.id+'Popup';
this.POPUP_BUTTON_ID = this.id+'PopupButton';
this.POPUP_INPUT_ID = this.id+'PopupInput';
+ this.IFRAME_ID = this.id+'IFrame';
this.firstDateIndex = 0;
this.daysData = {startDate:null, days:[]};
this.days = [];
+ var obj=$(id);
+
var htmlTextHeader = '<input id="'+this.id+'InputSelectedDate" name="'+this.id+'InputSelectedDate" type="hidden" style="display:none" value="'+this.getSelectedDateString(this.params.datePattern)+'"/>\n' +
'<input id="'+this.id+'InputCurrentDate" name="'+this.id+'InputCurrentDate" type="hidden" style="display:none" value="'+this.getCurrentDate().format("MM/y")+'"/>\n' +
'<table border="0" cellpadding="0" cellspacing="0" class="calendar_exterior"><tbody>\n';
@@ -342,6 +370,7 @@
var htmlControlsHeader = '<tr><td colspan="'+colspan+'" id="'+this.id+'Header"></td></tr>';
var htmlControlsFooter = '<tr><td colspan="'+colspan+'" id="'+this.id+'Footer"></td></tr>';
var htmlTextFooter = '</tbody></table>\n'
+ var htmlTextIFrame = '';
this.isVisible = true;
//if (this.params.popup==true)
@@ -355,6 +384,11 @@
//e.style.left="0px";
//e.style.top="0px";
this.isVisible = false;
+ //if (Richfaces.browser.isIE6)
+ {
+ new Insertion.Before(obj,'<iframe src="javascript:\'\'" frameborder="0" scrolling="no" id="' + this.IFRAME_ID + '"' +
+ 'style="display:none; position: absolute; width: 1px; height: 1px; background-color:white;">'+'</iframe>');
+ }
}
}
@@ -407,10 +441,9 @@
}
// set content
- var obj=$(id);
obj.component = this;
obj.richfacesComponent="richfaces:calendar";
- obj.innerHTML = htmlTextHeader+htmlHeaderOptional+htmlControlsHeader+htmlTextWeekDayBar+htmlTextWeek+htmlControlsFooter+htmlFooterOptional+htmlTextFooter;
+ obj.innerHTML = htmlTextIFrame+htmlTextHeader+htmlHeaderOptional+htmlControlsHeader+htmlTextWeekDayBar+htmlTextWeek+htmlControlsFooter+htmlFooterOptional+htmlTextFooter;
this.submitFunction = this.params.submitFunction.bind(this);
this.prepareEvents();
@@ -419,6 +452,7 @@
doCollapse: function() {
if (/*!this.params.popup || */!this.isVisible) return;
+ Element.hide(this.IFRAME_ID);
Element.hide(this.id);
this.isVisible = false;
},
@@ -428,10 +462,18 @@
var base = $(this.POPUP_ID);
var e = $(this.id);
+ var iframe = $(this.IFRAME_ID);
+
+ Richfaces.Calendar.setElementPosition(e, base, this.params.jointPoint, this.params.direction);
+ iframe.style.left = e.style.left;
+ iframe.style.top = e.style.top;
+ var edim = Richfaces.Calendar.getOffsetDimensions(e);
+ iframe.style.width = edim.width+'px';
+ iframe.style.height = edim.height+'px';
+
+ Element.show(iframe);
+ Element.show(e);
- Richfaces.Calendar.setElementPosition(e, base, this.params.jointPoint, "");//this.params.direction);
-
- Element.show(this.id);
this.isVisible = true;
},
17 years, 5 months
JBoss Rich Faces SVN: r1871 - in trunk/sandbox/ui/scrollable-grid/src: main/javascript/ClientUI/controls/grid and 3 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: konstantin.mishin
Date: 2007-07-26 12:21:22 -0400 (Thu, 26 Jul 2007)
New Revision: 1871
Modified:
trunk/sandbox/ui/scrollable-grid/src/main/java/org/richfaces/renderkit/html/ScrollableGridBaseRenderer.java
trunk/sandbox/ui/scrollable-grid/src/main/javascript/ClientUI/controls/grid/GridHeader.js
trunk/sandbox/ui/scrollable-grid/src/main/resources/org/richfaces/renderkit/html/css/grid.xcss
trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-cell.jspx
trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-footer-cell.jspx
trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-cell.jspx
trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-itself.jspx
trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid.jspx
trunk/sandbox/ui/scrollable-grid/src/test/java/org/richfaces/renderkit/html/ScrollableGridRendererTest.java
Log:
change name for CSS-classes
Modified: trunk/sandbox/ui/scrollable-grid/src/main/java/org/richfaces/renderkit/html/ScrollableGridBaseRenderer.java
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/java/org/richfaces/renderkit/html/ScrollableGridBaseRenderer.java 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/java/org/richfaces/renderkit/html/ScrollableGridBaseRenderer.java 2007-07-26 16:21:22 UTC (rev 1871)
@@ -325,7 +325,7 @@
ColumnWalker.iterateOverColumns(context, grid, cellRenderer, writer, state);
if(!state.isFrozenPart()){
writer.startElement("td", grid);
- getUtils().writeAttribute(writer, "class","ClientUI_Grid_BC " + state.getColumnClass(state.getCellIndex()));
+ getUtils().writeAttribute(writer, "class","dr-sgrid-bc " + state.getColumnClass(state.getCellIndex()));
writer.endElement("td");
}
writer.endElement(HTML.TR_ELEMENT);
Modified: trunk/sandbox/ui/scrollable-grid/src/main/javascript/ClientUI/controls/grid/GridHeader.js
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/javascript/ClientUI/controls/grid/GridHeader.js 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/javascript/ClientUI/controls/grid/GridHeader.js 2007-07-26 16:21:22 UTC (rev 1871)
@@ -16,7 +16,7 @@
CLASSDEF: {
name: 'ClientUI.controls.grid.GridHeader',
parent: ClientUI.common.box.Box,
- sepStyleClass: "ClientUI_Grid_HSep"
+ sepStyleClass: "dr-sgrid-hsep"
}
});
@@ -392,7 +392,7 @@
},
OnCellMouseDown: function(event) {
var el = Event.element(event);
- while(el && !Element.hasClassName(el, "ClientUI_Grid_HC")) {
+ while(el && !Element.hasClassName(el, "dr-sgrid-hc")) {
el = el.parentNode;
}
Modified: trunk/sandbox/ui/scrollable-grid/src/main/resources/org/richfaces/renderkit/html/css/grid.xcss
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/resources/org/richfaces/renderkit/html/css/grid.xcss 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/resources/org/richfaces/renderkit/html/css/grid.xcss 2007-07-26 16:21:22 UTC (rev 1871)
@@ -9,42 +9,29 @@
XPTable
*/
-<u:selector name=".ClientUI_Grid_HC .sort-asc">
+<u:selector name=".dr-sgrid-hc .sort-asc">
<u:style name="background-image">
<f:resource f:key="/org/richfaces/renderkit/html/images/sort_asc.gif"/>
</u:style>
</u:selector>
-<u:selector name=".ClientUI_Grid_HC .sort-desc">
+<u:selector name=".dr-sgrid-hc .sort-desc">
<u:style name="background-image">
<f:resource f:key="/org/richfaces/renderkit/html/images/sort_desc.gif"/>
</u:style>
</u:selector>
-<u:selector name=".ClientUI_Grid_HSep">
+<u:selector name=".dr-sgrid-hsep">
<u:style name="background-image">
<f:resource f:key="/org/richfaces/renderkit/html/images/grid-split.gif"/>
</u:style>
</u:selector>
-<u:selector name=".CustomHeaderVSep">
- <u:style name="background-image">
- <f:resource f:key="/org/richfaces/renderkit/html/images/grid-split.gif"/>
- </u:style>
-</u:selector>
-
-<u:selector name=".CustomHeaderHSep">
- <u:style name="background-image">
- <f:resource f:key="/org/richfaces/renderkit/html/images/grid-split-h.gif"/>
- </u:style>
-</u:selector>
-
-
<f:verbatim>
<![CDATA[
-.ClientUI_Grid {
+.dr-sgrid {
font: menu;
background-color: white;
padding: 0px 0px;
@@ -62,7 +49,7 @@
/**
* Header row
*/
-.ClientUI_Grid_HR {
+.dr-sgrid-hr {
background-color: #ebeadb;
z-index:2;
}
@@ -70,7 +57,7 @@
/**
* Header cell
*/
-.ClientUI_Grid_HC {
+.dr-sgrid-hc {
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
overflow: hidden;
@@ -86,7 +73,7 @@
border-right: 1px solid #ebeadb;
}
-.ClientUI_Grid_HC .sort-asc, .ClientUI_Grid_HC .sort-desc {
+.dr-sgrid-hc .sort-asc, .dr-sgrid-hc .sort-desc {
background-position: right;
background-repeat: no-repeat;
width: 16px !important;;
@@ -97,7 +84,7 @@
/**
* Header cells separator
*/
-.ClientUI_Grid_HSep {
+.dr-sgrid-hsep {
/* background-image: url(grid-split.gif);*/
background-position: center;
background-repeat: repeat-y;
@@ -112,7 +99,7 @@
white-space: nowrap;
z-index: 60;
}
-.ClientUI_Grid_HSplit {
+.dr-sgrid-hsplit {
width:1px;
border-right:1px dashed #6593cf;
cursor: col-resize;
@@ -122,7 +109,7 @@
/**
* Header cell body
*/
-.ClientUI_Grid_HCBody {
+.dr-sgrid-hcbody {
cursor: default;
padding: 0px 0px;
white-space: nowrap;
@@ -133,22 +120,10 @@
font: normal 8pt arial;
}
-.ClientUI_Grid_HC_Over{
- border-bottom: 1px solid #fcc247;
-}
-
-.ClientUI_Grid_HC_Over .ClientUI_Grid_HCBody{
- background-color: #faf9f4;
- border-bottom: 1px solid #f9a900;
-}
-
-.ClientUI_HRFrm {
- z-index: 48;
-}
-.ClientUI_FrozenBox{
+.dr-sgrid-fb{
z-index: 50;
}
-.ClientUI_NormalBox {
+.dr-sgrid-nb {
z-index: 20;
}
@@ -161,7 +136,7 @@
/**
* Footer row
*/
-.ClientUI_Grid_FR {
+.dr-sgrid-fr {
background-color: #fcfaf6;
font: normal 8pt arial;
height: 22px;
@@ -171,7 +146,7 @@
/**
* Footer cell
*/
-.ClientUI_Grid_FC {
+.dr-sgrid-fc {
-o-text-overflow: ellipsis;
text-overflow: ellipsis;
overflow: hidden;
@@ -190,7 +165,7 @@
/**
* Footer cell body
*/
-.ClientUI_Grid_FCBody {
+.dr-sgrid-fcbody {
cursor: default;
font: normal 8pt arial;
padding: 3px 5px;
@@ -200,7 +175,7 @@
overflow: hidden;
}
-.ClientUI_Grid_FCBody1{
+.dr-sgrid-fcbody1{
cursor: default;
font: normal 8pt arial;
padding: 0px 0px;
@@ -219,10 +194,10 @@
/**
* Body cell declaration
- * ClientUI_Grid_BC - reqired
- * ClientUI_Grid_BCDef - default, used if no custom styles defined in body template
+ * dr-sgrid-bc - reqired
+ * dr-sgrid-bcDef - default, used if no custom styles defined in body template
*/
-.ClientUI_Grid_BC {
+.dr-sgrid-bc {
box-sizing: border-box;
-moz-box-sizing: border-box;
-moz-outline: none;
@@ -231,17 +206,6 @@
border-right: 1px solid #f1efe2;
border-bottom: 1px solid #f1efe2;
}
-.ClientUI_Grid_BCIndex {
- background-color: #ebeadb;
- box-sizing: border-box;
- -moz-box-sizing: border-box;
- -moz-outline: none;
- -moz-user-focus: normal;
- cursor: default;
- border-left: 1px solid #f1efe2;
- border-bottom: 1px solid #cbc7b8;
- border-right: 1px solid #cbc7b8;
-}
/**
* Body row style
@@ -299,6 +263,7 @@
* Helper classes for grid template
*/
.ClientUI_Substrate {
+ z-index: 48;
filter:Alpha(opacity=0);
position:absolute;
top:0px;
@@ -317,34 +282,6 @@
overflow: hidden;
}
-.CustomHeaderVSep {
-
-/* background-image: url(themes/xp/grid-split.gif);*/
-
- background-position: top;
- background-repeat: repeat-y;
- font-size: 1px;
- top: 0px;
- width: 6px;
- height: 85%;
- z-index: 3;
-}
-
-.CustomHeaderHSep {
-
-/* background-image: url(themes/xp/grid-split-h.gif);*/
-
- background-position: center;
- background-repeat: repeat-x;
- font-size: 1px;
- top: 0px;
- left: 0px;
- width: 100%;
- height: 2px;
- z-index: 3;
- position: relative;
-}
-
.FirstClolumn {
font-weight: bold;
color: blue;
Modified: trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-cell.jspx
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-cell.jspx 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-cell.jspx 2007-07-26 16:21:22 UTC (rev 1871)
@@ -11,7 +11,7 @@
component="javax.faces.component.UIComponent"
>
- <td class="ClientUI_Grid_BC Idg-column-cell #{component.attributes['styleClass']}" id="#{client_id}:c_#{cell_id}">
+ <td class="dr-sgrid-bc Idg-column-cell #{component.attributes['styleClass']}" id="#{client_id}:c_#{cell_id}">
<div id="#{client_id}:bc_#{cell_id}" class="ClientUI_Grid_BCBody #{component.attributes['cellClass']}" style="#{component.attributes['cellStyle']}">
<vcp:body/>
</div>
Modified: trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-footer-cell.jspx
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-footer-cell.jspx 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-footer-cell.jspx 2007-07-26 16:21:22 UTC (rev 1871)
@@ -11,9 +11,9 @@
component="javax.faces.component.UIComponent"
>
- <td class="ClientUI_Grid_FC Idg-footer-cell #{component.attributes['footerClass']}">
- <span id="#{client_id}:fc_#{cell_index}" class="ClientUI_Grid_FCBody1">
- <span class="ClientUI_Grid_FCBody">
+ <td class="dr-sgrid-fc Idg-footer-cell #{component.attributes['footerClass']}">
+ <span id="#{client_id}:fc_#{cell_index}" class="dr-sgrid-fcbody1">
+ <span class="dr-sgrid-fcbody">
<vcp:body/>
</span>
</span>
Modified: trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-cell.jspx
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-cell.jspx 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-cell.jspx 2007-07-26 16:21:22 UTC (rev 1871)
@@ -12,7 +12,7 @@
component="javax.faces.component.UIComponent"
>
- <td class="ClientUI_Grid_HC Idg-header-cell #{component.attributes['headerClass']}" id="#{client_id}:hc_#{cell_index}" columnIndex="#{cell_index}" sortable="#{component.attributes['sortable']}">
+ <td class="dr-sgrid-hc Idg-header-cell #{component.attributes['headerClass']}" id="#{client_id}:hc_#{cell_index}" columnIndex="#{cell_index}" sortable="#{component.attributes['sortable']}">
<vcp:body/>
@@ -21,7 +21,7 @@
int offset = ((Integer)variables.getVariable("sepOffset")).intValue() - 3;
</jsp:scriptlet>
- <span column="#{cell_index}" id="#{client_id}:hsep_#{cell_index}" style="left: #{offset}px;" class="ClientUI_Grid_HSep" />
+ <span column="#{cell_index}" id="#{client_id}:hsep_#{cell_index}" style="left: #{offset}px;" class="dr-sgrid-hsep" />
</td>
</f:root>
\ No newline at end of file
Modified: trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-itself.jspx
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-itself.jspx 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid-header-itself.jspx 2007-07-26 16:21:22 UTC (rev 1871)
@@ -12,7 +12,7 @@
component="javax.faces.component.UIComponent"
>
-<div id="#{client_id}:hcb_#{cell_index}" class="ClientUI_Grid_HCBody">
+<div id="#{client_id}:hcb_#{cell_index}" class="dr-sgrid-hcbody">
<vcp:body/>
<c:if test="#{sortAscending}">
<div align="right" id="#{client_id}:hsorta_#{cell_index}" class="sort-asc" />
Modified: trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid.jspx
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid.jspx 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/main/templates/org/richfaces/scrollable-grid.jspx 2007-07-26 16:21:22 UTC (rev 1871)
@@ -66,12 +66,12 @@
</jsp:scriptlet>
- <div id="#{clientId}" style="width: #{component.attributes['width']};height: #{component.attributes['height']};" class="ClientUI_Grid #{component.attributes['styleClass']}" >
- <div id="#{clientId}:cs" class="ClientUI_Grid_HSplit" />
+ <div id="#{clientId}" style="width: #{component.attributes['width']};height: #{component.attributes['height']};" class="dr-sgrid #{component.attributes['styleClass']}" >
+ <div id="#{clientId}:cs" class="dr-sgrid-hsplit" />
<div id="#{clientId}_GridHeaderTemplate" class="ClientUI_InlineBox" style="#{hStyle}; width: #{component.attributes['width']};">
- <iframe id="#{clientId}:hs" class="ClientUI_HRFrm ClientUI_Substrate" src="" scrolling="no" frameborder="0" > <br/> </iframe>
+ <iframe id="#{clientId}:hs" class="ClientUI_Substrate" src="" scrolling="no" frameborder="0" > <br/> </iframe>
<div style="display: block; left: 0px; top: 0px; width: #{sumWidth}px;">
- <span class="ClientUI_TmplBox ClientUI_FrozenBox" id="#{clientId}:header:FrozenBox">
+ <span class="ClientUI_TmplBox dr-sgrid-fb" id="#{clientId}:header:FrozenBox">
<table cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -81,7 +81,7 @@
</jsp:scriptlet>
<tbody>
- <tr class="ClientUI_Grid_HR #{component.attributes['headerClass']}">
+ <tr class="dr-sgrid-hr #{component.attributes['headerClass']}">
<jsp:scriptlet>
<![CDATA[
renderHeaders(context, component, true);
@@ -92,7 +92,7 @@
</table>
</span>
- <span class="ClientUI_TmplBox ClientUI_NormalBox" id="#{clientId}:header:NormalBox">
+ <span class="ClientUI_TmplBox dr-sgrid-nb" id="#{clientId}:header:NormalBox">
<table cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -102,7 +102,7 @@
</jsp:scriptlet>
<col width="1"/>
<tbody>
- <tr class="ClientUI_Grid_HR #{component.attributes['headerClass']}">
+ <tr class="dr-sgrid-hr #{component.attributes['headerClass']}">
<jsp:scriptlet>
<![CDATA[
renderHeaders(context, component, false);
@@ -123,7 +123,7 @@
<div id="#{clientId}:sb" style="position: absolute;" ><br/> </div>
</div>
<div id="#{clientId}:bc" style="display: block; width: #{sumWidth}px;">
- <span class="ClientUI_TmplBox ClientUI_FrozenBox" id="#{clientId}:body:FrozenBox">
+ <span class="ClientUI_TmplBox dr-sgrid-fb" id="#{clientId}:body:FrozenBox">
<table id="#{clientId}:f" cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -141,7 +141,7 @@
</table>
<span class="ClientUI_Grid_HO" id="#{clientId}:fho" ><br/></span>
</span>
- <span class="ClientUI_TmplBox ClientUI_NormalBox" id="#{clientId}:body:NormalBox">
+ <span class="ClientUI_TmplBox dr-sgrid-nb" id="#{clientId}:body:NormalBox">
<table id="#{clientId}:n" cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -164,9 +164,9 @@
</div>
<div id="#{clientId}_GridFooterTemplate" class="ClientUI_InlineBox" style="#{fStyle}; width: #{component.attributes['width']};">
- <iframe id="#{clientId}:fs" class="ClientUI_FRFrm ClientUI_Substrate" src="" scrolling="no" frameborder="0" > <br/></iframe>
+ <iframe id="#{clientId}:fs" class="ClientUI_Substrate" src="" scrolling="no" frameborder="0" > <br/></iframe>
<div style="display: block; width: width: #{sumWidth}px;">
- <span class="ClientUI_TmplBox ClientUI_FrozenBox" id="#{clientId}:footer:FrozenBox">
+ <span class="ClientUI_TmplBox dr-sgrid-fb" id="#{clientId}:footer:FrozenBox">
<table cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -175,7 +175,7 @@
]]>
</jsp:scriptlet>
<tbody>
- <tr class="ClientUI_Grid_FR #{component.attributes['footerClass']}">
+ <tr class="dr-sgrid-fr #{component.attributes['footerClass']}">
<jsp:scriptlet>
<![CDATA[
renderFooters(context, component,true);
@@ -186,7 +186,7 @@
</table>
</span>
- <span class="ClientUI_TmplBox ClientUI_NormalBox" id="#{clientId}:footer:NormalBox">
+ <span class="ClientUI_TmplBox dr-sgrid-nb" id="#{clientId}:footer:NormalBox">
<table cellpadding="0" cellspacing="0" style="border-collapse:collapse; table-layout:fixed">
<jsp:scriptlet>
@@ -196,7 +196,7 @@
</jsp:scriptlet>
<col width="1"/>
<tbody>
- <tr class="ClientUI_Grid_FR #{component.attributes['footerClass']}">
+ <tr class="dr-sgrid-fr #{component.attributes['footerClass']}">
<jsp:scriptlet>
<![CDATA[
renderFooters(context, component,false);
Modified: trunk/sandbox/ui/scrollable-grid/src/test/java/org/richfaces/renderkit/html/ScrollableGridRendererTest.java
===================================================================
--- trunk/sandbox/ui/scrollable-grid/src/test/java/org/richfaces/renderkit/html/ScrollableGridRendererTest.java 2007-07-26 15:16:41 UTC (rev 1870)
+++ trunk/sandbox/ui/scrollable-grid/src/test/java/org/richfaces/renderkit/html/ScrollableGridRendererTest.java 2007-07-26 16:21:22 UTC (rev 1871)
@@ -120,7 +120,7 @@
assertEquals("div", div.getNodeName());
String classAttr = div.getAttributeValue("class");
- assertTrue(classAttr.contains("ClientUI_Grid"));
+ assertTrue(classAttr.contains("dr-sgrid"));
Iterator childIter= div.getChildElementsIterator();
String id = grid.getId();
@@ -155,7 +155,7 @@
res = false;
if(elemClassAttr.contains("ClientUI_InlineBox")){
res = true;
- }else if(elemClassAttr.contains("ClientUI_Grid_HSplit")){
+ }else if(elemClassAttr.contains("dr-sgrid-hsplit")){
res = true;
}
assertTrue(res);
@@ -205,9 +205,9 @@
assertNotNull(elemClassAttr);
if(element.getId().contains("FrozenBox")){
- assertTrue(elemClassAttr.contains("ClientUI_TmplBox ClientUI_FrozenBox"));
+ assertTrue(elemClassAttr.contains("ClientUI_TmplBox dr-sgrid-fb"));
}else if(element.getId().contains("NormalBox")){
- assertTrue(elemClassAttr.contains("ClientUI_TmplBox ClientUI_NormalBox"));
+ assertTrue(elemClassAttr.contains("ClientUI_TmplBox dr-sgrid-nb"));
}
@@ -216,13 +216,13 @@
HtmlElement hcell = page.getHtmlElementById(id + ":hc_" + i);
assertNotNull(hcell);
elemClassAttr = hcell.getAttributeValue("class");
- assertTrue(elemClassAttr.contains("ClientUI_Grid_HC Idg-header-cell"));
+ assertTrue(elemClassAttr.contains("dr-sgrid-hc Idg-header-cell"));
for (int j = 0; j < grid.getRows(); j++) {
HtmlElement bcell = page.getHtmlElementById(id + ":c_" + j + "_" + i);
assertNotNull(bcell);
elemClassAttr = bcell.getAttributeValue("class");
- assertTrue(elemClassAttr.contains("ClientUI_Grid_BC Idg-column-cell"));
+ assertTrue(elemClassAttr.contains("dr-sgrid-bc Idg-column-cell"));
}
}
17 years, 5 months
JBoss Rich Faces SVN: r1870 - in trunk/sandbox/ui/calendar/src/main: templates/org/richfaces and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: akushunin
Date: 2007-07-26 11:16:41 -0400 (Thu, 26 Jul 2007)
New Revision: 1870
Modified:
trunk/sandbox/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
trunk/sandbox/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx
Log:
Modified: trunk/sandbox/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
===================================================================
--- trunk/sandbox/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-07-26 15:01:49 UTC (rev 1869)
+++ trunk/sandbox/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2007-07-26 15:16:41 UTC (rev 1870)
@@ -92,26 +92,33 @@
public abstract void setData(CalendarDataModel dataModel);
public abstract String getDatePattern();
+
public abstract void setDatePattern(String pattern);
-
+
public abstract Object getMonthLabels();
+
public abstract void setMonthLabels(Object labels);
-
+
public abstract Object getMonthLabelsShort();
+
public abstract void setMonthLabelsShort(Object labels);
-
+
public abstract Object getWeekDayLabels();
+
public abstract void setWeekDayLabels(Object labels);
public abstract Object getWeekDayLabelsShort();
+
public abstract void setWeekDayLabelsShort(Object labels);
-
+
public abstract String getJointPoint();
+
public abstract void setJointPoint(String jointPoint);
+
public abstract String getDirection();
+
public abstract void setDirection(String direction);
-
-
+
// currentDate processing -------------------------------------------------
public String getValueAsString(FacesContext context, UIComponent component)
@@ -120,51 +127,53 @@
Date valueString = calendar.getCurrentDate();
return valueString.toString();
}
-
+
public Calendar getCalendar() {
return Calendar.getInstance(getTimeZone(), getLocale());
}
- public Converter getDateConverter(){
+
+ public Converter getDateConverter() {
DateTimeConverter datetime = new DateTimeConverter();
return datetime;
-
}
-
+
public Date getConvertedValue(FacesContext context, String currentDateString)
throws ConverterException {
-
+
DateTimeConverter datetime = new DateTimeConverter();
datetime.setPattern("MM/yyyy");
Date newCurrentDate = (Date) datetime.getAsObject(context, this,
currentDateString);
return newCurrentDate;
}
-
+
protected void validateValue(FacesContext context, Object newValue) {
setSubmittedValue(newValue);
super.validateValue(context, newValue);
}
-
+
public void updateCurrentDate(FacesContext context, Date currentDate) {
if (context == null) {
throw new NullPointerException();
}
- try{
- ValueBinding vb = getValueBinding("currentDate");
- if (vb != null) {
- vb.setValue(context, currentDate);
- return;
- }else{ setCurrentDate(currentDate);}
- }catch (Exception e) {
-
+ try {
+ ValueBinding vb = getValueBinding("currentDate");
+ if (vb != null) {
+ vb.setValue(context, currentDate);
+ return;
+ } else {
+ setCurrentDate(currentDate);
+ }
+ } catch (Exception e) {
+
String messageString = e.getMessage();
FacesMessage message = new FacesMessage(messageString);
message.setSeverity(FacesMessage.SEVERITY_ERROR);
context.addMessage(getClientId(context), message);
}
}
-
+
public Date getCurrentDateOrDefault() {
Date date = getCurrentDate();
if (date != null) {
@@ -176,6 +185,17 @@
}
}
+ public Object getTooltip(Date date){
+
+ CalendarDataModel calendarDM = (CalendarDataModel) getData();
+ if (calendarDM != null) {
+ return calendarDM.getToolTip(date);
+ }else{
+ return null;
+ }
+
+ }
+
protected Date getDefaultPreloadBegin(Date date) {
Calendar calendar = Calendar.getInstance(getTimeZone(), getLocale());
calendar.setTime(date);
@@ -187,6 +207,7 @@
return calendar.getTime();
}
+
protected Date getDefaultPreloadEnd(Date date) {
Calendar calendar = Calendar.getInstance(getTimeZone(), getLocale());
calendar.setTime(date);
@@ -228,32 +249,37 @@
if (event instanceof CurrentDateChangeEvent) {
FacesContext facesContext = FacesContext.getCurrentInstance();
CurrentDateChangeEvent dateChangeEvent = (CurrentDateChangeEvent) event;
- String currentDateString = dateChangeEvent.getCurrentDateString();
+ String currentDateString = dateChangeEvent
+ .getCurrentDateString();
if (currentDateString != null) {
- // if currentDateString is not null then event cames from apply request phase
+ // if currentDateString is not null then event cames from
+ // apply request phase
try {
- Date currentDate = getConvertedValue(facesContext, currentDateString);
- CurrentDateChangeEvent newDateChangeEvent = new CurrentDateChangeEvent(this, currentDate);
+ Date currentDate = getConvertedValue(facesContext,
+ currentDateString);
+ CurrentDateChangeEvent newDateChangeEvent = new CurrentDateChangeEvent(
+ this, currentDate);
newDateChangeEvent.queue();
} catch (Exception e) {
String messageString = e.getMessage();
FacesMessage message = new FacesMessage(messageString);
message.setSeverity(FacesMessage.SEVERITY_ERROR);
- facesContext.addMessage(getClientId(facesContext), message);
- }
-
- }
- else{
+ facesContext.addMessage(getClientId(facesContext),
+ message);
+ }
+
+ } else {
Date currentDate1 = dateChangeEvent.getCurrentDate();
Date currentDate2 = getCurrentDate();
- if(!currentDate1.equals(currentDate2)){
+ if (!currentDate1.equals(currentDate2)) {
updateCurrentDate(facesContext, currentDate1);
- ValueChangeEvent changeEvent = new ValueChangeEvent(this,currentDate2,currentDate1);
+ ValueChangeEvent changeEvent = new ValueChangeEvent(
+ this, currentDate2, currentDate1);
changeEvent.queue();
-
+
}
-
+
}
} else {
super.broadcast(event);
Modified: trunk/sandbox/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx
===================================================================
--- trunk/sandbox/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx 2007-07-26 15:01:49 UTC (rev 1869)
+++ trunk/sandbox/ui/calendar/src/main/templates/org/richfaces/htmlCalendar.jspx 2007-07-26 15:16:41 UTC (rev 1870)
@@ -30,6 +30,7 @@
datePattern: '#{component.datePattern}',
jointPoint: '#{component.jointPoint}',
direction: '#{component.direction}',
+ popup: '#{component.popup}',
<f:call name="writeSymbols" />,
firstWeekDay: #{this:getFirstWeekDay(context, component)},
minDaysInFirstWeek: #{this:getMinDaysInFirstWeek(context, component)},
17 years, 5 months
JBoss Rich Faces SVN: r1869 - trunk/docs/ajaxguide/en/src/main/docbook/modules.
by richfaces-svn-commits@lists.jboss.org
Author: vkukharchuk
Date: 2007-07-26 11:01:49 -0400 (Thu, 26 Jul 2007)
New Revision: 1869
Modified:
trunk/docs/ajaxguide/en/src/main/docbook/modules/a4jUGfaq.xml
Log:
http://jira.jboss.com/jira/browse/AJSF-93
http://jira.jboss.com/jira/browse/AJSF-100
Modified: trunk/docs/ajaxguide/en/src/main/docbook/modules/a4jUGfaq.xml
===================================================================
--- trunk/docs/ajaxguide/en/src/main/docbook/modules/a4jUGfaq.xml 2007-07-26 15:00:57 UTC (rev 1868)
+++ trunk/docs/ajaxguide/en/src/main/docbook/modules/a4jUGfaq.xml 2007-07-26 15:01:49 UTC (rev 1869)
@@ -315,6 +315,16 @@
</section>
+ <section id="CustomAjaxRequest">
+ <?dbhtml filename="CustomAjaxRequest.html"?>
+ <title>Why custom AJAX request does not work?</title>
+ <para>More information about this problem could be found on the <ulink
+ url="http://www.jboss.com/index.html?module=bb&op=viewtopic&t=114025"
+ >Ajax4Jsf Users Forum.</ulink>
+ </para>
+ </section>
+
+
<section id="RerederingSingleDataTableColumn">
<?dbhtml filename="RerederingSingleDataTableColumn.html"?>
<title>How to reRender single dataTable column?</title>
@@ -324,6 +334,17 @@
</para>
</section>
+ <section id="DisableSkins">
+ <?dbhtml filename="DisableSkins.html"?>
+ <title>How to disable skinability?</title>
+ There is possibility to use special skin with name "plain". It doesn't have any parameters.
+ It's necessary for embedding RichFaces components into existing projecst which have its own styles.
+ <para>For information you can see discussion about this problem on the <ulink
+ url="http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4066340#..."
+ >Ajax4Jsf Users Forum. </ulink>
+ </para>
+ </section>
+
<section id="reRenderingfailed">
<?dbhtml filename="reRenderingfailed.html"?>
<title>Why does reRendering fail? Hide/Show components using rendered.</title>
17 years, 5 months
JBoss Rich Faces SVN: r1868 - trunk/docs/ajaxguide/en/src/main/docbook/included.
by richfaces-svn-commits@lists.jboss.org
Author: vkukharchuk
Date: 2007-07-26 11:00:57 -0400 (Thu, 26 Jul 2007)
New Revision: 1868
Modified:
trunk/docs/ajaxguide/en/src/main/docbook/included/portlet.xml
Log:
http://jira.jboss.com/jira/browse/AJSF-90
Modified: trunk/docs/ajaxguide/en/src/main/docbook/included/portlet.xml
===================================================================
--- trunk/docs/ajaxguide/en/src/main/docbook/included/portlet.xml 2007-07-26 12:59:36 UTC (rev 1867)
+++ trunk/docs/ajaxguide/en/src/main/docbook/included/portlet.xml 2007-07-26 15:00:57 UTC (rev 1868)
@@ -62,4 +62,12 @@
</para>
</section>
+ <section>
+ <title>Relevant resources links</title>
+ <para>
+ The aditional information about component usage you can find here:
+ <ulink url="http://www.jboss.com/index.html?module=bb&op=viewtopic&t=107325">Ajax4Jsf Users Forum.
+ </ulink>
+ </para>
+ </section>
</chapter>
\ No newline at end of file
17 years, 5 months