JBoss Rich Faces SVN: r11983 - trunk/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/advanced/js.
by richfaces-svn-commits@lists.jboss.org
Author: pyaschenko
Date: 2008-12-23 05:42:07 -0500 (Tue, 23 Dec 2008)
New Revision: 11983
Modified:
trunk/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/advanced/js/link.js
Log:
https://jira.jboss.org/jira/browse/RF-5412
Modified: trunk/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/advanced/js/link.js
===================================================================
--- trunk/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/advanced/js/link.js 2008-12-23 10:01:58 UTC (rev 11982)
+++ trunk/ui/editor/src/main/resources/org/richfaces/renderkit/html/scripts/tiny_mce/themes/advanced/js/link.js 2008-12-23 10:42:07 UTC (rev 11983)
@@ -89,8 +89,11 @@
},
checkPrefix : function(n) {
- if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
+ // RF: variable added with regexp to avoid error in JSMin.java
+ var re = /^\s*mailto:/i;
+ if (n.value && Validator.isEmail(n) && !re.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
n.value = 'mailto:' + n.value;
+ // RF: end
if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
n.value = 'http://' + n.value;
17 years, 4 months
JBoss Rich Faces SVN: r11982 - trunk/framework/impl/src/main/resources/org/richfaces/component.
by richfaces-svn-commits@lists.jboss.org
Author: pgolawski
Date: 2008-12-23 05:01:58 -0500 (Tue, 23 Dec 2008)
New Revision: 11982
Modified:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
Log:
https://jira.jboss.org/jira/browse/RF-5451
Modified: trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties 2008-12-23 10:01:41 UTC (rev 11981)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages_de.properties 2008-12-23 10:01:58 UTC (rev 11982)
@@ -1,9 +1,9 @@
# components
-org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
-org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
-org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
-org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
-org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Spalten
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sortieren aufsteigend
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sortieren absteigend
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Gruppe nach Spalte
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Deaktivieren Sie Gruppierung
# converters
17 years, 4 months
JBoss Rich Faces SVN: r11981 - trunk/framework/impl/src/main/resources/org/richfaces/component.
by richfaces-svn-commits@lists.jboss.org
Author: pgolawski
Date: 2008-12-23 05:01:41 -0500 (Tue, 23 Dec 2008)
New Revision: 11981
Modified:
trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
Log:
English messages are default
Modified: trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties
===================================================================
--- trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties 2008-12-23 09:31:55 UTC (rev 11980)
+++ trunk/framework/impl/src/main/resources/org/richfaces/component/messages.properties 2008-12-23 10:01:41 UTC (rev 11981)
@@ -1,9 +1,9 @@
# components
-org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns de
-org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending de
-org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending de
-org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column de
-org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping de
+org.richfaces.component.UIExtendedDataTable.Menu.Columns=Columns
+org.richfaces.component.UIExtendedDataTable.Menu.SortAscending=Sort Ascending
+org.richfaces.component.UIExtendedDataTable.Menu.SortDescending=Sort Descending
+org.richfaces.component.UIExtendedDataTable.Menu.GroupByColumn=Group by this column
+org.richfaces.component.UIExtendedDataTable.Menu.DisableGrouping=Disable Grouping
# converters
17 years, 4 months
JBoss Rich Faces SVN: r11980 - trunk/ui/extendedDataTable/src/main/java/org/richfaces/component.
by richfaces-svn-commits@lists.jboss.org
Author: pgolawski
Date: 2008-12-23 04:31:55 -0500 (Tue, 23 Dec 2008)
New Revision: 11980
Modified:
trunk/ui/extendedDataTable/src/main/java/org/richfaces/component/UIExtendedDataTable.java
Log:
change table state before UPDATE_MODEL_VALUE phase
Modified: trunk/ui/extendedDataTable/src/main/java/org/richfaces/component/UIExtendedDataTable.java
===================================================================
--- trunk/ui/extendedDataTable/src/main/java/org/richfaces/component/UIExtendedDataTable.java 2008-12-23 09:08:49 UTC (rev 11979)
+++ trunk/ui/extendedDataTable/src/main/java/org/richfaces/component/UIExtendedDataTable.java 2008-12-23 09:31:55 UTC (rev 11980)
@@ -113,12 +113,12 @@
event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
} else if (event instanceof DragDropEvent) {
new AjaxEvent(this).queue();
- event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
+ event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
} else if (event instanceof ChangeColumnVisibilityEvent) {
new AjaxEvent(this).queue();
- event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
+ event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
} else if (event instanceof ColumnResizeEvent) {
- event.setPhaseId(PhaseId.UPDATE_MODEL_VALUES);
+ event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
} else if (event instanceof ExtTableSortEvent) {
new AjaxEvent(this).queue();
event.setPhaseId(PhaseId.INVOKE_APPLICATION);
@@ -143,7 +143,7 @@
String dropValue = event.getDropValue().toString();// dnd_drop_script
getState().changeColumnsOrder(dragValue, dropValue, event.isDropBefore());
- getFacesContext().renderResponse();
+ //getFacesContext().renderResponse();
}
public List<UIComponent> getSortedChildren() {
@@ -152,7 +152,7 @@
public void processChangeColumnVisibility(ChangeColumnVisibilityEvent event) {
getState().toggleColumnVisibility(this, event.getColumnId());
- getFacesContext().renderResponse();
+ //getFacesContext().renderResponse();
}
public void processSortingChange(ExtTableSortEvent event) {
@@ -184,7 +184,7 @@
public void processColumnResize(ColumnResizeEvent event) {
getState().changeColumnSize(this, event.getColumnWidths());
- getFacesContext().renderResponse();
+ //getFacesContext().renderResponse();
}
public String getColumnSize(UIComponent column) {
17 years, 4 months
JBoss Rich Faces SVN: r11979 - in trunk/samples/richfaces-demo/src/main: webapp/WEB-INF and 1 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: pgolawski
Date: 2008-12-23 04:08:49 -0500 (Tue, 23 Dec 2008)
New Revision: 11979
Modified:
trunk/samples/richfaces-demo/src/main/java/org/richfaces/demo/extendedDataTable/ExtendedTableBean.java
trunk/samples/richfaces-demo/src/main/webapp/WEB-INF/faces-config.xml
trunk/samples/richfaces-demo/src/main/webapp/richfaces/extendedDataTable/examples/simple.xhtml
Log:
https://jira.jboss.org/jira/browse/RF-5422
use ExtendedTableDataModel
Modified: trunk/samples/richfaces-demo/src/main/java/org/richfaces/demo/extendedDataTable/ExtendedTableBean.java
===================================================================
--- trunk/samples/richfaces-demo/src/main/java/org/richfaces/demo/extendedDataTable/ExtendedTableBean.java 2008-12-23 01:20:32 UTC (rev 11978)
+++ trunk/samples/richfaces-demo/src/main/java/org/richfaces/demo/extendedDataTable/ExtendedTableBean.java 2008-12-23 09:08:49 UTC (rev 11979)
@@ -4,41 +4,23 @@
package org.richfaces.demo.extendedDataTable;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import org.richfaces.component.html.HtmlExtendedDataTable;
import org.richfaces.demo.capitals.Capital;
-import org.richfaces.model.selection.SimpleSelection;
+import org.richfaces.model.DataProvider;
+import org.richfaces.model.ExtendedTableDataModel;
/**
* @author Ilya Shaikovsky
- *
+ *
*/
public class ExtendedTableBean {
private String sortMode="single";
private String selectionMode="multi";
- private HtmlExtendedDataTable table;
- private SimpleSelection selection;
- private List<Capital> selectedCapitals = new ArrayList<Capital>();
+ private ExtendedTableDataModel<Capital> dataModel;
+ private List<Capital> capitals = new ArrayList<Capital>();
- public void takeSelection() {
- getSelectedCapitals().clear();
- Iterator<Object> iterator = getSelection().getKeys();
- while (iterator.hasNext()){
- Object key = iterator.next();
- table.setRowKey(key);
- if (table.isRowAvailable()) {
- getSelectedCapitals().add((Capital) table.getRowData());
- }
- }
- }
-
- public void resetSelection() {
- getSelectedCapitals().clear();
- }
-
public String getSortMode() {
return sortMode;
}
@@ -57,29 +39,41 @@
public ExtendedTableBean() {
}
+
+ public ExtendedTableDataModel<Capital> getCapitalsDataModel() {
+ if (dataModel == null) {
+ dataModel = new ExtendedTableDataModel<Capital>(new DataProvider<Capital>(){
- public HtmlExtendedDataTable getTable() {
- return table;
- }
+ private static final long serialVersionUID = 5054087821033164847L;
- public void setTable(HtmlExtendedDataTable table) {
- this.table = table;
- }
+ public Capital getItemByKey(Object key) {
+ for(Capital c : capitals){
+ if (key.equals(getKey(c))){
+ return c;
+ }
+ }
+ return null;
+ }
- public SimpleSelection getSelection() {
- return selection;
- }
+ public List<Capital> getItemsByRange(int firstRow, int endRow) {
+ return capitals.subList(firstRow, endRow);
+ }
- public void setSelection(SimpleSelection selection) {
- this.selection = selection;
- }
+ public Object getKey(Capital item) {
+ return item.getName();
+ }
- public List<Capital> getSelectedCapitals() {
- return selectedCapitals;
+ public int getRowCount() {
+ return capitals.size();
+ }
+
+ });
+ }
+ return dataModel;
}
- public void setSelectedCapitals(List<Capital> selectedCapitals) {
- this.selectedCapitals = selectedCapitals;
+ public void setCapitals(List<Capital> capitals) {
+ this.capitals = capitals;
}
-
+
}
Modified: trunk/samples/richfaces-demo/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/WEB-INF/faces-config.xml 2008-12-23 01:20:32 UTC (rev 11978)
+++ trunk/samples/richfaces-demo/src/main/webapp/WEB-INF/faces-config.xml 2008-12-23 09:08:49 UTC (rev 11979)
@@ -402,6 +402,10 @@
<managed-bean-name>extendedTableBean</managed-bean-name>
<managed-bean-class>org.richfaces.demo.extendedDataTable.ExtendedTableBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
+ <managed-property>
+ <property-name>capitals</property-name>
+ <value>#{capitalsBean.capitals}</value>
+ </managed-property>
</managed-bean>
<managed-bean>
<managed-bean-name>queueBean</managed-bean-name>
Modified: trunk/samples/richfaces-demo/src/main/webapp/richfaces/extendedDataTable/examples/simple.xhtml
===================================================================
--- trunk/samples/richfaces-demo/src/main/webapp/richfaces/extendedDataTable/examples/simple.xhtml 2008-12-23 01:20:32 UTC (rev 11978)
+++ trunk/samples/richfaces-demo/src/main/webapp/richfaces/extendedDataTable/examples/simple.xhtml 2008-12-23 09:08:49 UTC (rev 11979)
@@ -1,88 +1,64 @@
<!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/a4j"
- xmlns:rich="http://richfaces.org/rich">
+ 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/a4j"
+ xmlns:rich="http://richfaces.org/rich">
-<ui:composition>
- <h:form>
+ <ui:composition>
+ <h:form>
<h:panelGrid columns="2" columnClasses="top,top">
- <rich:extendedDataTable value="#{capitalsBean.capitals}" var="cap"
- id="table" width="580px" height="400px"
- sortMode="#{extendedTableBean.sortMode}"
- selectionMode="#{extendedTableBean.selectionMode}"
- selection="#{extendedTableBean.selection}"
- binding="#{extendedTableBean.table}">
- <rich:column sortable="false" label="Flag">
- <f:facet name="header">
- <h:outputText value="Flag" />
- </f:facet>
- <h:graphicImage value="#{cap.stateFlag}" />
- </rich:column>
- <rich:column sortable="true" sortBy="#{cap.state}"
- filterBy="#{cap.state}" filterEvent="onkeyup" width="170px"
- label="State Name">
- <f:facet name="header">
- <h:outputText value="State Name" />
- </f:facet>
- <h:outputText value="#{cap.state}" />
- </rich:column>
- <rich:column sortable="true" sortBy="#{cap.name}"
- filterBy="#{cap.name}" filterEvent="onkeyup" width="170px"
- label="State Capital">
- <f:facet name="header">
- <h:outputText value="State Capital" />
- </f:facet>
- <h:outputText value="#{cap.name}" />
- </rich:column>
- <rich:column sortable="false" label="Time Zone">
- <f:facet name="header">
- <h:outputText value="Time Zone" />
- </f:facet>
- <h:outputText value="#{cap.timeZone}" />
- </rich:column>
- <a4j:support event="onselectionchange" reRender="restable"
- ajaxSingle="true" action="#{extendedTableBean.takeSelection}"></a4j:support>
- </rich:extendedDataTable>
- <h:panelGrid columns="1">
- <rich:panel>
- <f:facet name="header">
- <h:outputText value="Sort/Selection modes changing" />
- </f:facet>
- <h:panelGrid columns="2">
- <h:outputText value="Sort Mode:" />
- <h:selectOneMenu value="#{extendedTableBean.sortMode}">
- <f:selectItem itemLabel="Single" itemValue="single" />
- <f:selectItem itemLabel="Multi" itemValue="multi" />
- <a4j:support event="onchange" ajaxSingle="true" reRender="table" />
- </h:selectOneMenu>
- <h:outputText value="Selection Mode:" />
- <h:selectOneMenu value="#{extendedTableBean.selectionMode}">
- <a4j:support ajaxSingle="true" event="onchange" reRender="table" />
- <f:selectItem itemLabel="Single" itemValue="single" />
- <f:selectItem itemLabel="Multi" itemValue="multi" />
- <f:selectItem itemLabel="None" itemValue="none" />
- </h:selectOneMenu>
- </h:panelGrid>
- </rich:panel>
- <rich:panel id="restable">
- <f:facet name="header">
- <h:outputText value="Selected rows(capital names)" />
- </f:facet>
- <rich:dataList value="#{extendedTableBean.selectedCapitals}"
- var="cap" rendered="#{not empty extendedTableBean.selectedCapitals}">
- <h:outputText value="#{cap.name}" />
- </rich:dataList>
- <h:outputText value="Nothing selected"
- rendered="#{empty extendedTableBean.selectedCapitals}" />
- </rich:panel>
+ <rich:extendedDataTable value="#{extendedTableBean.capitalsDataModel}" var="cap" id="table"
+ width="580px" height="400px" sortMode="#{extendedTableBean.sortMode}"
+ selectionMode="#{extendedTableBean.selectionMode}">
+ <rich:column sortable="false" label="Flag">
+ <f:facet name="header">
+ <h:outputText value="Flag"/>
+ </f:facet>
+ <h:graphicImage value="#{cap.stateFlag}"/>
+ </rich:column>
+ <rich:column sortable="true" sortBy="#{cap.state}" filterBy="#{cap.state}" filterEvent="onkeyup" width="170px" label="State Name">
+ <f:facet name="header">
+ <h:outputText value="State Name"/>
+ </f:facet>
+ <h:outputText value="#{cap.state}"/>
+ </rich:column>
+ <rich:column sortable="true" sortBy="#{cap.name}" filterBy="#{cap.name}" filterEvent="onkeyup" width="170px" label="State Capital">
+ <f:facet name="header">
+ <h:outputText value="State Capital"/>
+ </f:facet>
+ <h:outputText value="#{cap.name}"/>
+ </rich:column>
+ <rich:column sortable="false" label="Time Zone">
+ <f:facet name="header">
+ <h:outputText value="Time Zone"/>
+ </f:facet>
+ <h:outputText value="#{cap.timeZone}"/>
+ </rich:column>
+ </rich:extendedDataTable>
+ <rich:panel>
+ <f:facet name="header">
+ <h:outputText value="Sort/Selection modes changing"/>
+ </f:facet>
+ <h:panelGrid columns="2">
+ <h:outputText value="Sort Mode:"/>
+ <h:selectOneMenu value="#{extendedTableBean.sortMode}">
+ <f:selectItem itemLabel="Single" itemValue="single"/>
+ <f:selectItem itemLabel="Multi" itemValue="multi"/>
+ <a4j:support event="onchange" ajaxSingle="true" reRender="table"/>
+ </h:selectOneMenu>
+ <h:outputText value="Selection Mode:"/>
+ <h:selectOneMenu value="#{extendedTableBean.selectionMode}">
+ <a4j:support ajaxSingle="true" event="onchange" reRender="table"/>
+ <f:selectItem itemLabel="Single" itemValue="single"/>
+ <f:selectItem itemLabel="Multi" itemValue="multi"/>
+ <f:selectItem itemLabel="None" itemValue="none"/>
+ </h:selectOneMenu>
</h:panelGrid>
-
+ </rich:panel>
</h:panelGrid>
- </h:form>
- <rich:messages></rich:messages>
-</ui:composition>
+ </h:form>
+ </ui:composition>
</html>
\ No newline at end of file
17 years, 4 months
JBoss Rich Faces SVN: r11978 - in trunk: docs/xslt and 11 other directories.
by richfaces-svn-commits@lists.jboss.org
Author: alexsmirnov
Date: 2008-12-22 20:20:32 -0500 (Mon, 22 Dec 2008)
New Revision: 11978
Added:
trunk/docs/xslt/
trunk/docs/xslt/en/
trunk/ui/beanValidator/src/main/java/org/richfaces/validator/GraphValidator.java
trunk/ui/message/src/test/java/org/richfaces/component/
trunk/ui/message/src/test/java/org/richfaces/component/UIMessagesTest.java
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
trunk/samples/beanValidatorSample/src/main/webapp/pages/index.xhtml
trunk/ui/beanValidator/pom.xml
trunk/ui/beanValidator/src/main/config/component/beanValidator.xml
trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java
trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java
trunk/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
trunk/ui/beanValidator/src/test/java/org/richfaces/component/BeanValidatorComponentTest.java
trunk/ui/message/src/main/java/org/richfaces/component/UIRichMessages.java
trunk/ui/message/src/main/java/org/richfaces/renderkit/html/HtmlRichMessagesRenderer.java
Log:
https://jira.jboss.org/jira/browse/RF-4433
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java
===================================================================
--- trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/framework/impl/src/main/java/org/ajax4jsf/application/AjaxViewHandler.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -129,27 +129,6 @@
}
}
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.framework.ViewHandlerWrapper#restoreView(javax.faces.context.FacesContext,
- * java.lang.String)
- */
-// public UIViewRoot restoreView(FacesContext context, String viewId) {
-// UIViewRoot viewRoot = super.restoreView(context, viewId);
-// ExternalContext externalContext = context.getExternalContext();
-// Map<String, Object> requestMap = externalContext.getRequestMap();
-// if (null == viewRoot) {
-// requestMap.put(VIEW_EXPIRED, Messages
-// .getMessage(Messages.AJAX_VIEW_EXPIRED));
-// if (_log.isDebugEnabled()) {
-// _log
-// .debug("Detect session expiration in AJAX request - view don't restored for a viewId "
-// + viewId);
-// }
-// }
-// return viewRoot;
-// }
/*
* (non-Javadoc)
Modified: trunk/samples/beanValidatorSample/src/main/webapp/pages/index.xhtml
===================================================================
--- trunk/samples/beanValidatorSample/src/main/webapp/pages/index.xhtml 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/samples/beanValidatorSample/src/main/webapp/pages/index.xhtml 2008-12-23 01:20:32 UTC (rev 11978)
@@ -32,7 +32,7 @@
</h:panelGrid>
<h:commandButton value="Submit"></h:commandButton>
</rich:panel>
- <rich:messages />
+ <rich:messages id="fieldsMessages"/>
</h:form>
<h:form id="form1">
<h2>Input fields with label and message in the JSF dataTable.
Modified: trunk/ui/beanValidator/pom.xml
===================================================================
--- trunk/ui/beanValidator/pom.xml 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/pom.xml 2008-12-23 01:20:32 UTC (rev 11978)
@@ -48,6 +48,11 @@
<version>3.3.0-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>message</artifactId>
+ <version>3.3.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>3.1.0.GA</version>
Modified: trunk/ui/beanValidator/src/main/config/component/beanValidator.xml
===================================================================
--- trunk/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-12-23 01:20:32 UTC (rev 11978)
@@ -149,6 +149,15 @@
</property>
<property exist="true">
+ <name>type</name>
+ <classname>java.lang.String</classname>
+ <description>
+ JSF Validator type, that implements GraphValidator interface.This validator is used for the Graph and input fields validation.
+ </description>
+ <defaultvalue>"org.richfaces.BeanValidator"</defaultvalue>
+ </property>
+
+ <property exist="true">
<name>value</name>
<classname>java.lang.Object</classname>
<description>
Modified: trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java
===================================================================
--- trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -22,16 +22,15 @@
package org.richfaces.component;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.List;
import java.util.Set;
import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.component.EditableValueHolder;
+import javax.faces.component.NamingContainer;
import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
import javax.faces.component.UIInput;
@@ -57,169 +56,206 @@
* JSF component class
*
*/
-public abstract class UIBeanValidator extends UIComponentBase implements AjaxComponent, AjaxSupport, AjaxContainer {
+public abstract class UIBeanValidator extends UIComponentBase implements
+ AjaxComponent, AjaxSupport, AjaxContainer {
- public static final String COMPONENT_TYPE = "org.richfaces.BeanValidator";
+ public static final String COMPONENT_TYPE = "org.richfaces.BeanValidator";
- public static final String COMPONENT_FAMILY = "org.richfaces.BeanValidator";
+ public static final String COMPONENT_FAMILY = "org.richfaces.BeanValidator";
- public static final String BEAN_VALIDATOR_FACET = "org.richfaces.validator.";
-
+ public static final String BEAN_VALIDATOR_FACET = "org.richfaces.validator.";
- @Override
- public void setParent(UIComponent parent) {
- super.setParent(parent);
+ @Override
+ public void setParent(UIComponent parent) {
+ super.setParent(parent);
- if (null != parent && parent instanceof EditableValueHolder) {
- setParentProperties(parent);
- }
- }
+ if (null != parent && parent instanceof EditableValueHolder) {
+ setParentProperties(parent);
+ }
+ }
- /**
- * @param parent
- * @throws FacesException
- */
- public void setParentProperties(UIComponent parent) throws FacesException {
- if (!(parent instanceof EditableValueHolder)) {
- throw new FacesException("Parent component must be an EditableValueHolder");
- }
+ /**
+ * @param parent
+ * @throws FacesException
+ */
+ public void setParentProperties(UIComponent parent) throws FacesException {
+ if (!(parent instanceof EditableValueHolder)) {
+ throw new FacesException(
+ "Parent component must be an EditableValueHolder");
+ }
- if (null != getEvent()) {
- ValueExpression binding = new EventValueExpression(this);
- parent.setValueExpression(getEvent(), binding);
- }
- }
+ if (null != getEvent()) {
+ ValueExpression binding = new EventValueExpression(this);
+ parent.setValueExpression(getEvent(), binding);
+ }
+ }
- @Override
- public void broadcast(FacesEvent event) throws AbortProcessingException {
- super.broadcast(event);
- if (event.getComponent() == this) {
- FacesContext context = getFacesContext();
- if (event instanceof ValidationEvent) {
- // ByPass UpdateModelValue
- context.renderResponse();
- } else if (event instanceof AjaxEvent) {
- // TODO - find all UIMessages components for a parent UIInput.
- // for an ajaxSingle component, re-render only target message.
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- ajaxContext.setSubmittedRegionClientId(this.getClientId(context));
- }
- }
- }
+ @Override
+ public void broadcast(FacesEvent event) throws AbortProcessingException {
+ super.broadcast(event);
+ if (event.getComponent() == this) {
+ FacesContext context = getFacesContext();
+ if (event instanceof ValidationEvent) {
+ // ByPass UpdateModelValue
+ context.renderResponse();
+ } else if (event instanceof AjaxEvent) {
+ // TODO - find all UIMessages components for a parent UIInput.
+ // for an ajaxSingle component, re-render only target message.
+ AjaxContext ajaxContext = AjaxContext
+ .getCurrentInstance(context);
+ ajaxContext.setSubmittedRegionClientId(this
+ .getClientId(context));
+ }
+ }
+ }
- @Override
- public void queueEvent(FacesEvent event) {
- if (event instanceof ValidationEvent && event.getComponent() == this) {
- UIComponent parent = getParent();
- if (parent instanceof UIInput) {
- UIInput input = (UIInput) parent;
- if (input.isImmediate()) {
- event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
- } else {
- event.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
- }
- }
- }
- super.queueEvent(event);
- }
+ @Override
+ public void queueEvent(FacesEvent event) {
+ if (event instanceof ValidationEvent && event.getComponent() == this) {
+ UIComponent parent = getParent();
+ if (parent instanceof UIInput) {
+ UIInput input = (UIInput) parent;
+ if (input.isImmediate()) {
+ event.setPhaseId(PhaseId.APPLY_REQUEST_VALUES);
+ } else {
+ event.setPhaseId(PhaseId.PROCESS_VALIDATIONS);
+ }
+ }
+ }
+ super.queueEvent(event);
+ }
- public String getEventString() {
- StringBuffer buildOnEvent = new StringBuffer();
- String onsubmit = getOnsubmit();
- // Insert script to call before submit ajax request.
- if (null != onsubmit) {
- buildOnEvent.append(onsubmit).append(";");
- }
- buildOnEvent.append(AjaxRendererUtils.buildOnEvent(this, getFacesContext(), getEvent()));
- String script = buildOnEvent.toString();
- return script;
- }
+ public String getEventString() {
+ StringBuffer buildOnEvent = new StringBuffer();
+ String onsubmit = getOnsubmit();
+ // Insert script to call before submit ajax request.
+ if (null != onsubmit) {
+ buildOnEvent.append(onsubmit).append(";");
+ }
+ buildOnEvent.append(AjaxRendererUtils.buildOnEvent(this,
+ getFacesContext(), getEvent()));
+ String script = buildOnEvent.toString();
+ return script;
+ }
- public UIComponent getSingleComponent() {
- return getParent();
- }
+ public UIComponent getSingleComponent() {
+ return getParent();
+ }
- public void encodeAjax(FacesContext context) throws IOException {
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- Set<String> renderedAreas = ajaxContext.getAjaxRenderedAreas();
- List<UIComponent> allMessages = getMessages(context);
- for (UIComponent message : allMessages) {
- if (message.isRendered()) {
- message.encodeAll(context);
- renderedAreas.add(message.getClientId(context));
- }
- }
- // Write information about encoded areas after submission.
- AjaxRendererUtils.encodeAreas(context, this);
- }
+ public void encodeAjax(FacesContext context) throws IOException {
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+ Set<String> renderedAreas = ajaxContext.getAjaxRenderedAreas();
+ for (UIComponent message : getMessages(context)) {
+ if (message.isRendered()) {
+ message.encodeAll(context);
+ renderedAreas.add(message.getClientId(context));
+ }
+ }
+ // Write information about encoded areas after submission.
+ AjaxRendererUtils.encodeAreas(context, this);
+ }
- public List<UIComponent> getMessages(FacesContext context) {
- ArrayList<UIComponent> messages = new ArrayList<UIComponent>();
- UIComponent form = AjaxRendererUtils.getNestingForm(this);
- if (null == form) {
- form = context.getViewRoot();
- }
- findMessages(form, messages);
- return messages;
- }
+ public Set<UIComponent> getMessages(FacesContext context) {
+ Set<UIComponent> messages = new HashSet<UIComponent>();
+ findMessages(this.getParent(), this, messages,false);
+ findRichMessages(context, context.getViewRoot(), messages);
+ return messages;
+ }
- /**
- * Recursive search messages for the parent component.
- *
- * @param component
- * @param messages
- */
- protected void findMessages(UIComponent component, ArrayList<UIComponent> messages) {
- // TODO create more intellectual search, symmenric for an UIMessage
- // algoritm.
- Iterator<UIComponent> facetsAndChildren = component.getFacetsAndChildren();
- while (facetsAndChildren.hasNext()) {
- UIComponent child = (UIComponent) facetsAndChildren.next();
- if (child instanceof UIMessage || child instanceof UIMessages) {
- UIComponent message = (UIComponent) child;
- Object messag = message.getAttributes().get("for");
- String messageFor = messag != null ? messag.toString() : null ;
-
- if (null != messageFor && messageFor.equals(getParent().getId())) {
- messages.add(message);
- }
- }
- else {
- findMessages(child, messages);
- }
- }
- }
+
+ /**
+ * Find all instances of the {@link UIRichMessages} and update list of the rendered messages.
+ * @param context
+ * @param component
+ * @param messages
+ */
+ protected void findRichMessages(FacesContext context,UIComponent component, Set<UIComponent> messages) {
+ Iterator<UIComponent> facetsAndChildren = component.getFacetsAndChildren();
+ while (facetsAndChildren.hasNext()) {
+ UIComponent child = (UIComponent) facetsAndChildren.next();
+ if (child instanceof UIRichMessages) {
+ UIRichMessages richMessage = (UIRichMessages) child;
+ if(null == richMessage.getFor()){
+ richMessage.updateMessages(context, this.getParent().getClientId(context));
+ messages.add(richMessage);
+ }
+ } else {
+ findRichMessages(context, child, messages);
+ }
+ }
+ }
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.event.AjaxSource#addAjaxListener(org.ajax4jsf.event.AjaxListener)
- */
- public void addAjaxListener(AjaxListener listener) {
- addFacesListener(listener);
- }
+ /**
+ * Recursive search messages for the parent component.
+ * @param parent
+ * @param component
+ * @param messages
+ * @return
+ */
+ protected boolean findMessages(UIComponent parent, UIComponent component,
+ Set<UIComponent> messages,boolean found) {
+ Iterator<UIComponent> facetsAndChildren = parent.getFacetsAndChildren();
+ while (facetsAndChildren.hasNext()) {
+ UIComponent child = (UIComponent) facetsAndChildren.next();
+ if (child != component) {
+ if (child instanceof UIMessage || child instanceof UIMessages) {
+ UIComponent message = (UIComponent) child;
+ Object targetId = message.getAttributes().get("for");
+ if (null != targetId
+ && targetId.equals(getParent().getId())) {
+ messages.add(message);
+ found = true;
+ }
+ } else {
+ found |= findMessages(child, null, messages,found);
+ }
+ }
+ }
+ if(!(found && parent instanceof NamingContainer) && component != null){
+ UIComponent newParent = parent.getParent();
+ if(null != newParent){
+ found = findMessages(newParent, parent, messages,found);
+ }
+ }
+ return found;
+ }
- /*
- * (non-Javadoc)
- *
- * @see org.ajax4jsf.event.AjaxSource#getAjaxListeners()
- */
- public AjaxListener[] getAjaxListeners() {
- return (AjaxListener[]) getFacesListeners(AjaxListener.class);
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.ajax4jsf.event.AjaxSource#addAjaxListener(org.ajax4jsf.event.AjaxListener
+ * )
+ */
+ public void addAjaxListener(AjaxListener listener) {
+ addFacesListener(listener);
+ }
- /* (non-Javadoc)
- * @see org.ajax4jsf.event.AjaxSource#removeAjaxListener(org.ajax4jsf.event.AjaxListener)
- */
- public void removeAjaxListener(AjaxListener listener) {
- removeFacesListener(listener);
- }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.ajax4jsf.event.AjaxSource#getAjaxListeners()
+ */
+ public AjaxListener[] getAjaxListeners() {
+ return (AjaxListener[]) getFacesListeners(AjaxListener.class);
+ }
- public void setAjaxListener(MethodExpression listener) {
- AjaxListener[] ajaxListeners = getAjaxListeners();
- for (int i = 0; i < ajaxListeners.length; i++) {
+ /*
+ * (non-Javadoc)
+ *
+ * @seeorg.ajax4jsf.event.AjaxSource#removeAjaxListener(org.ajax4jsf.event.
+ * AjaxListener)
+ */
+ public void removeAjaxListener(AjaxListener listener) {
+ removeFacesListener(listener);
+ }
+
+ public void setAjaxListener(MethodExpression listener) {
+ AjaxListener[] ajaxListeners = getAjaxListeners();
+ for (int i = 0; i < ajaxListeners.length; i++) {
AjaxListener ajaxListener = ajaxListeners[i];
- if (ajaxListener.getClass().equals(MethodExpressionAjaxListener.class)) {
+ if (ajaxListener.getClass().equals(
+ MethodExpressionAjaxListener.class)) {
MethodExpressionAjaxListener expressionListener = (MethodExpressionAjaxListener) ajaxListener;
if (expressionListener.getExpression() != listener) {
removeAjaxListener(ajaxListener);
@@ -233,21 +269,22 @@
}
}
}
- }
-
- addAjaxListener(new MethodExpressionAjaxListener(listener));
- }
-
- public MethodExpression getAjaxListener() {
- AjaxListener[] ajaxListeners = getAjaxListeners();
- for (int i = 0; i < ajaxListeners.length; i++) {
+ }
+
+ addAjaxListener(new MethodExpressionAjaxListener(listener));
+ }
+
+ public MethodExpression getAjaxListener() {
+ AjaxListener[] ajaxListeners = getAjaxListeners();
+ for (int i = 0; i < ajaxListeners.length; i++) {
AjaxListener ajaxListener = ajaxListeners[i];
- if (ajaxListener.getClass().equals(MethodExpressionAjaxListener.class)) {
+ if (ajaxListener.getClass().equals(
+ MethodExpressionAjaxListener.class)) {
MethodExpressionAjaxListener expressionListener = (MethodExpressionAjaxListener) ajaxListener;
return expressionListener.getExpression();
}
- }
-
- return null;
- }
+ }
+
+ return null;
+ }
}
Modified: trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java
===================================================================
--- trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/src/main/java/org/richfaces/component/UIGraphValidator.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -53,6 +53,7 @@
import org.richfaces.event.ValidationEvent;
import org.richfaces.validator.BeanValidator;
import org.richfaces.validator.FacesBeanValidator;
+import org.richfaces.validator.GraphValidator;
/**
@@ -106,23 +107,43 @@
* @param newvalue
*/
public abstract void setProfile(Set<String> newvalue);
+
+ /**
+ * Get graph validator Id.
+ * @return
+ */
+ public abstract String getType();
+ /**
+ * Set graph validator Id.
+ * @param newvalue
+ */
+ public abstract void setType(String newvalue);
+
+
+
@Override
public void processUpdates(FacesContext context) {
super.processUpdates(context);
Object value = getValue();
if (null != value) {
- BeanValidator beanValidator = BeanValidator.getInstance(context);
- String[] messages = beanValidator.validateGraph(context, value,getProfile());
- if (null != messages) {
- context.renderResponse();
- // send all validation messages.
- for (String msg : messages) {
- // TODO - create Summary message ?
- String summary = null != getSummary() ? getSummary() + msg : msg;
- context.addMessage(null, new FacesMessage(
- FacesMessage.SEVERITY_ERROR, summary, msg));
+ Validator validator = context.getApplication().createValidator(getType());
+ if (validator instanceof GraphValidator) {
+ GraphValidator graphValidator = (GraphValidator) validator;
+ String[] messages = graphValidator.validateGraph(context,this, value,getProfile());
+ if (null != messages) {
+ context.renderResponse();
+ // send all validation messages.
+ for (String msg : messages) {
+ // TODO - create Summary message ?
+ String summary = null != getSummary() ? getSummary() + msg : msg;
+ context.addMessage(null, new FacesMessage(
+ FacesMessage.SEVERITY_ERROR, summary, msg));
+ }
}
+
+ } else {
+ throw new FacesException("Validator "+FacesBeanValidator.BEAN_VALIDATOR_TYPE+" does not implement GraphValidator");
}
}
@@ -131,7 +152,7 @@
@Override
public void encodeBegin(FacesContext context) throws IOException {
super.encodeBegin(context);
- FacesBeanValidator validator = (FacesBeanValidator)context.getApplication().createValidator(FacesBeanValidator.BEAN_VALIDATOR_TYPE);
+ FacesBeanValidator validator = (FacesBeanValidator)context.getApplication().createValidator(getType());
validator.setSummary(getSummary());
setupValidators(this,validator);
}
Modified: trunk/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
===================================================================
--- trunk/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -21,6 +21,7 @@
package org.richfaces.validator;
import java.io.Serializable;
+import java.util.Set;
import javax.el.ELException;
import javax.el.ValueExpression;
@@ -39,7 +40,7 @@
* @author asmirnov
*
*/
-public class FacesBeanValidator implements Validator,Serializable {
+public class FacesBeanValidator implements Validator,Serializable, GraphValidator {
/**
*
@@ -112,4 +113,11 @@
}
}
}
+
+ public String[] validateGraph(FacesContext context, UIComponent component,
+ Object value, Set<String> profiles) throws ValidatorException {
+ BeanValidator beanValidator = BeanValidator.getInstance(context);
+ String[] messages = beanValidator.validateGraph(context, value,profiles);
+ return messages;
+ }
}
Added: trunk/ui/beanValidator/src/main/java/org/richfaces/validator/GraphValidator.java
===================================================================
--- trunk/ui/beanValidator/src/main/java/org/richfaces/validator/GraphValidator.java (rev 0)
+++ trunk/ui/beanValidator/src/main/java/org/richfaces/validator/GraphValidator.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -0,0 +1,24 @@
+/**
+ *
+ */
+package org.richfaces.validator;
+
+import java.util.Set;
+
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.Validator;
+import javax.faces.validator.ValidatorException;
+
+/**
+ * This interface should be implemented by the JSF {@link Validator} which able to
+ * validate entire graph.
+ * @author asmirnov
+ *
+ */
+public interface GraphValidator {
+
+ public String[] validateGraph(FacesContext context, UIComponent component, Object value,
+ Set<String> profiles) throws ValidatorException ;
+
+}
Property changes on: trunk/ui/beanValidator/src/main/java/org/richfaces/validator/GraphValidator.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified: trunk/ui/beanValidator/src/test/java/org/richfaces/component/BeanValidatorComponentTest.java
===================================================================
--- trunk/ui/beanValidator/src/test/java/org/richfaces/component/BeanValidatorComponentTest.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/beanValidator/src/test/java/org/richfaces/component/BeanValidatorComponentTest.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -29,6 +29,7 @@
import javax.el.PropertyNotFoundException;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIForm;
+import javax.faces.component.UIMessage;
import javax.faces.component.UIMessages;
import javax.faces.component.html.HtmlForm;
import javax.faces.el.MethodNotFoundException;
@@ -50,6 +51,7 @@
UIBeanValidator validator = null;
HtmlInputText input = null;
UIMessages messages = null;
+ private UIMessage message;
public BeanValidatorComponentTest(String name) {
super(name);
@@ -64,12 +66,17 @@
validator = (UIBeanValidator)application.createComponent(UIBeanValidator.COMPONENT_TYPE);
validator.setId("validator");
+ input.setId("input");
input.getChildren().add(validator);
- input.setId("input");
form.getChildren().add(input);
- messages = (UIMessages)application.createComponent(UIMessages.COMPONENT_TYPE);
+ messages = (UIRichMessages)application.createComponent(UIRichMessages.COMPONENT_TYPE);
messages.setId("messages");
form.getChildren().add(messages);
+ message = (UIMessage)application.createComponent(UIMessage.COMPONENT_TYPE);
+ message.setId("msg");
+ message.setFor("input");
+ form.getChildren().add(message);
+ facesContext.getViewRoot().getChildren().add(form);
}
public void tearDown() throws Exception {
Modified: trunk/ui/message/src/main/java/org/richfaces/component/UIRichMessages.java
===================================================================
--- trunk/ui/message/src/main/java/org/richfaces/component/UIRichMessages.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/message/src/main/java/org/richfaces/component/UIRichMessages.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -20,102 +20,297 @@
*/
package org.richfaces.component;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+
import javax.el.ELException;
import javax.el.ValueExpression;
import javax.faces.FacesException;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.FacesMessage.Severity;
+import javax.faces.component.UIComponent;
import javax.faces.component.UIMessages;
import javax.faces.context.FacesContext;
import org.ajax4jsf.component.AjaxOutput;
+import org.ajax4jsf.renderkit.RendererUtils;
/**
* @author Anton Belevich
- *
+ *
*/
-public abstract class UIRichMessages extends UIMessages implements AjaxOutput{
+public abstract class UIRichMessages extends UIMessages implements AjaxOutput {
- private String forVal = null;
- private boolean isPassed = true;
-
- /**
- * <p>Return the client identifier of the component for which
- * this component represents associated message(s) (if any).</p>
- */
- public String getFor() {
+ public static final String COMPONENT_TYPE = "org.richfaces.component.RichMessages";
- if (this.forVal != null) {
- return (this.forVal);
+ private String forVal = null;
+ private boolean updated = false;
+
+ private List<FacesMessageWithId> renderedMessages;
+
+ /**
+ * <p>
+ * Return the client identifier of the component for which this component
+ * represents associated message(s) (if any).
+ * </p>
+ */
+ public String getFor() {
+
+ if (this.forVal != null) {
+ return (this.forVal);
+ }
+ ValueExpression ve = getValueExpression("for");
+ if (ve != null) {
+ try {
+ return ((String) ve.getValue(getFacesContext().getELContext()));
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ return (null);
+ }
+
}
- ValueExpression ve = getValueExpression("for");
- if (ve != null) {
- try {
- return ((String) ve.getValue(getFacesContext().getELContext()));
- }
- catch (ELException e) {
- throw new FacesException(e);
- }
- } else {
- return (null);
- }
- }
+ /**
+ * <p>
+ * Set the client identifier of the component for which this component
+ * represents associated message(s) (if any). This property must be set
+ * before the message is displayed.
+ * </p>
+ *
+ * @param newFor
+ * The new client id
+ */
+ public void setFor(String newFor) {
+ forVal = newFor;
- /**
- * <p>Set the client identifier of the component for which this
- * component represents associated message(s) (if any). This
- * property must be set before the message is displayed.</p>
- *
- * @param newFor The new client id
- */
- public void setFor(String newFor) {
+ }
- forVal = newFor;
+ public boolean isUpdated() {
+ return updated;
+ }
- }
-
- public boolean isPassed(){
- return isPassed;
- }
-
public boolean isAjaxRendered() {
return true;
}
- public void setAjaxRendered(boolean ajaxRendered){
- if(!ajaxRendered){
+ public Iterator<FacesMessage> getMessages(FacesContext context) {
+ String forInputId = getFor();
+ if (null == this.renderedMessages || null != forInputId) {
+ List<String> severenities = getSeverenities();
+ renderedMessages = new ArrayList<FacesMessageWithId>();
+ if (isGlobalOnly()) {
+ addMessagesForId(context, null, severenities);
+ } else if (null != forInputId) {
+ UIComponent componentFor = RendererUtils.getInstance()
+ .findComponentFor(context, this, forInputId);
+ if (null != componentFor) {
+ addMessagesForId(context,
+ componentFor.getClientId(context), severenities);
+ }
+ } else {
+ Iterator<String> clientIdsWithMessages = context
+ .getClientIdsWithMessages();
+ while (clientIdsWithMessages.hasNext()) {
+ addMessagesForId(context, clientIdsWithMessages.next(),
+ severenities);
+ }
+ }
+ }
+ ;
+ final Iterator<FacesMessageWithId> iterator = this
+ .renderedMessages.iterator();
+ return new Iterator<FacesMessage>() {
+
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ public FacesMessage next() {
+ return iterator.next().getMessage();
+ }
+
+ public void remove() {
+ }
+ };
+ }
+
+ public void updateMessages(FacesContext context, String forId) {
+ updated = true;
+ if (null == renderedMessages) {
+ renderedMessages = new ArrayList<FacesMessageWithId>();
+ } else {
+ Iterator<FacesMessageWithId> renderedMessageIterator = renderedMessages
+ .iterator();
+ while (renderedMessageIterator.hasNext()) {
+ String clientId = renderedMessageIterator.next().getClientId();
+ if ((null == forId && null == clientId) || (null != forId && forId.equals(clientId))) {
+ renderedMessageIterator.remove();
+ }
+ }
+ }
+ addMessagesForId(context, forId, getSeverenities());
+ }
+
+ /**
+ * @param context
+ * @param forId
+ * @param severenities
+ * TODO
+ */
+ protected void addMessagesForId(FacesContext context, String forId,
+ List<String> severenities) {
+ Iterator<FacesMessage> messages = context.getMessages(forId);
+ while (messages.hasNext()) {
+ FacesMessage message = messages.next();
+ if (severenities.size() == 0 || severenities.contains("ALL")
+ || isApplicableMessage(severenities, message)) {
+ renderedMessages.add(
+ new FacesMessageWithId(forId, message));
+ }
+ }
+ }
+
+ /**
+ * @param severenities
+ * @param message
+ * @return
+ */
+ protected boolean isApplicableMessage(List<String> severenities,
+ FacesMessage message) {
+ if (severenities.size() == 0 || severenities.contains("ALL")) {
+ return true;
+ }
+ Severity severity = message.getSeverity();
+ for (Object key : FacesMessage.VALUES_MAP.keySet()) {
+ Severity sev = (Severity) FacesMessage.VALUES_MAP.get(key);
+ if(0 == sev.compareTo(severity)){
+ return severenities.contains(key);
+ }
+ }
+ return false;
+ }
+
+ public void setAjaxRendered(boolean ajaxRendered) {
+ if (!ajaxRendered) {
new IllegalArgumentException();
- }
+ }
}
-
- public void decode(FacesContext context){
-// isPassed = true;
- super.decode(context);
+
+ @Override
+ public void encodeBegin(FacesContext context) throws IOException {
+ if (!isUpdated()) {
+ setRenderedMessages(null);
+ }
+ super.encodeBegin(context);
}
public abstract String getLevel();
public abstract void setLevel(String level);
+ public List<String> getSeverenities() {
+ String level = getLevel();
+ List<String> severenities;
+ if (null != level) {
+ String[] levels = level.split(",");
+ severenities = new ArrayList<String>(levels.length);
+ for (int i = 0; i < levels.length; i++) {
+ String levelName = levels[i].toUpperCase().trim();
+ severenities.add(levelName);
+ }
+ } else {
+ severenities = Collections.emptyList();
+ }
+ return severenities;
+ }
+
private Object[] values;
public Object saveState(FacesContext context) {
if (values == null) {
- values = new Object[2];
+ values = new Object[3];
}
values[0] = super.saveState(context);
values[1] = this.forVal;
+ values[2] = saveAttachedState(context, getRenderedMessages());
return (values);
}
+ @SuppressWarnings("unchecked")
public void restoreState(FacesContext context, Object state) {
values = (Object[]) state;
super.restoreState(context, values[0]);
forVal = (String) values[1];
+ setRenderedMessages((List<FacesMessageWithId>) restoreAttachedState(
+ context, values[2]));
}
+ /**
+ * @author asmirnov
+ *
+ */
+ @SuppressWarnings("serial")
+ public static class FacesMessageWithId implements
+ Serializable {
+ private FacesMessage message;
+
+ private final String clientId;
+
+ /**
+ * @param clientId
+ * @param message
+ */
+ public FacesMessageWithId(String clientId, FacesMessage message) {
+ this.message = message;
+ this.clientId = clientId;
+ }
+
+ /**
+ * @return the message
+ */
+ public FacesMessage getMessage() {
+ return message;
+ }
+
+ /**
+ * @return the clientId
+ */
+ public String getClientId() {
+ return clientId;
+ }
+
+
+
+
+ }
+
+ /**
+ * @return the renderedMessages
+ */
+ protected List<FacesMessageWithId> getRenderedMessages() {
+ return renderedMessages;
+ }
+
+ /**
+ * @param renderedMessages
+ * the renderedMessages to set
+ */
+ protected void setRenderedMessages(List<FacesMessageWithId> renderedMessages) {
+ this.renderedMessages = renderedMessages;
+ }
+
}
Modified: trunk/ui/message/src/main/java/org/richfaces/renderkit/html/HtmlRichMessagesRenderer.java
===================================================================
--- trunk/ui/message/src/main/java/org/richfaces/renderkit/html/HtmlRichMessagesRenderer.java 2008-12-22 18:48:42 UTC (rev 11977)
+++ trunk/ui/message/src/main/java/org/richfaces/renderkit/html/HtmlRichMessagesRenderer.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -57,17 +57,8 @@
throw new FacesException("The rich:messages component must specify only one of 'for' or 'globalOnly' atribbute");
}
}
- Iterator<FacesMessage> messagesIter = getMessageIterator(context, forIds, component);
+ Iterator<FacesMessage> messagesIter = uiMessages.getMessages(context);
boolean isDisplayNone = !messagesIter.hasNext();
- String [] levels = uiMessages.getLevel().split(",");
- List<String> acceptLevels = creatAcceptLevels(levels);
-
- if(!isDisplayNone){
-
- if (!isAcceptableMessagesPresent(acceptLevels, messagesIter)) {
- isDisplayNone = true;
- }
- }
boolean isWroteTable = false;
layout = (String)uiMessages.getAttributes().get("layout");
if((layout != null) && (layout.equals("table"))){
@@ -89,7 +80,7 @@
}
- messagesIter = getMessageIterator(context, forIds, component);
+// messagesIter = getMessageIterator(context, forIds, component);
if(!messagesIter.hasNext()){
renderBody(uiMessages, context, writer, null,isWroteTable);
@@ -97,11 +88,7 @@
while(messagesIter.hasNext()){
FacesMessage facesMsg = (FacesMessage)(messagesIter.next());
-
- if(isAcceptableMessage(facesMsg, acceptLevels)){
-
- renderBody(uiMessages, context, writer, facesMsg,isWroteTable);
- }
+ renderBody(uiMessages, context, writer, facesMsg,isWroteTable);
}
}
@@ -231,7 +218,7 @@
public void renderBody(UIRichMessages uiMessages, FacesContext context, ResponseWriter writer,FacesMessage facesMsg,boolean isWroteTable) throws IOException{
- if(uiMessages.isPassed() || facesMsg != null ){
+ if(facesMsg != null ){
if(isWroteTable){
writer.startElement(HTML.TR_ELEMENT, uiMessages);
writer.startElement(HTML.td_ELEM, uiMessages);
Added: trunk/ui/message/src/test/java/org/richfaces/component/UIMessagesTest.java
===================================================================
--- trunk/ui/message/src/test/java/org/richfaces/component/UIMessagesTest.java (rev 0)
+++ trunk/ui/message/src/test/java/org/richfaces/component/UIMessagesTest.java 2008-12-23 01:20:32 UTC (rev 11978)
@@ -0,0 +1,239 @@
+/**
+ *
+ */
+package org.richfaces.component;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlInputText;
+
+import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
+import org.richfaces.component.UIRichMessages.FacesMessageWithId;
+
+/**
+ * @author asmirnov
+ *
+ */
+public class UIMessagesTest extends AbstractAjax4JsfTestCase {
+
+ private static final class MockRichMessages extends UIRichMessages {
+ private String level = "ALL";
+
+ @Override
+ public String getLevel() {
+ return level;
+ }
+
+ @Override
+ public void setLevel(String level) {
+ this.level = level;
+
+ }
+
+ public boolean isKeepTransient() {
+ return true;
+ }
+
+ public void setKeepTransient(boolean ajaxRendered) {
+ }
+ }
+
+ private static final String INPUT_ID = "input";
+ private static final String MESSAGES_ID = "messages";
+ private UIRichMessages uiMessages;
+
+ /**
+ * @param name
+ */
+ public UIMessagesTest(String name) {
+ super(name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#setUp()
+ */
+ public void setUp() throws Exception {
+ super.setUp();
+ uiMessages = new MockRichMessages();
+ uiMessages.setId(MESSAGES_ID);
+ List<UIComponent> children = facesContext.getViewRoot().getChildren();
+ children.add(uiMessages);
+ HtmlInputText inputText = new HtmlInputText();
+ inputText.setId(INPUT_ID);
+ children.add(inputText);
+ }
+
+ /* (non-Javadoc)
+ * @see org.ajax4jsf.tests.AbstractAjax4JsfTestCase#tearDown()
+ */
+ public void tearDown() throws Exception {
+ this.uiMessages = null;
+ super.tearDown();
+ }
+
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#getMessages(javax.faces.context.FacesContext)}.
+ */
+ public void testGetMessages() {
+ prepareMessages();
+ uiMessages.getMessages(facesContext);
+ assertEquals(8, uiMessages.getRenderedMessages().size());
+ }
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#getMessages(javax.faces.context.FacesContext)}.
+ */
+ public void testGetMessagesWithFor() {
+ prepareMessages();
+ uiMessages.setFor(INPUT_ID);
+ uiMessages.getMessages(facesContext);
+ assertEquals(4, uiMessages.getRenderedMessages().size());
+ assertEquals(INPUT_ID, uiMessages.getRenderedMessages().get(0).getClientId());
+ }
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#getMessages(javax.faces.context.FacesContext)}.
+ */
+ public void testGetMessagesForGlobal() {
+ prepareMessages();
+ uiMessages.setGlobalOnly(true);
+ Iterator<FacesMessage> iterator = uiMessages.getMessages(facesContext);
+ assertEquals(4, uiMessages.getRenderedMessages().size());
+ assertTrue(iterator.hasNext());
+ }
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#updateMessages(javax.faces.context.FacesContext, java.lang.String)}.
+ */
+ public void testUpdateMessages() {
+ prepareMessages();
+ ArrayList<FacesMessageWithId> savedMessages = prepareSavedMessages();
+ uiMessages.setRenderedMessages(savedMessages);
+ uiMessages.updateMessages(facesContext, INPUT_ID);
+ assertTrue(uiMessages.isUpdated());
+ assertSame(savedMessages,uiMessages.getRenderedMessages());
+ assertEquals(6, uiMessages.getRenderedMessages().size());
+ }
+
+ /**
+ * @return
+ */
+ private ArrayList<FacesMessageWithId> prepareSavedMessages() {
+ ArrayList<FacesMessageWithId> savedMessages = new ArrayList<FacesMessageWithId>();
+ FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_WARN,"Warn","Old Warn level message");
+ savedMessages.add(new FacesMessageWithId(INPUT_ID,facesMessage));
+ savedMessages.add(new FacesMessageWithId(null,facesMessage));
+ savedMessages.add(new FacesMessageWithId("bar",facesMessage));
+ return savedMessages;
+ }
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#updateMessages(javax.faces.context.FacesContext, java.lang.String)}.
+ */
+ public void testUpdateEmptyMessages() {
+ prepareMessages();
+ uiMessages.updateMessages(facesContext, INPUT_ID);
+ assertTrue(uiMessages.isUpdated());
+ assertNotNull(uiMessages.getRenderedMessages());
+ assertEquals(4, uiMessages.getRenderedMessages().size());
+ }
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#encodeBegin(javax.faces.context.FacesContext)}.
+ * @throws IOException
+ */
+ public void testEncodeBeginFacesContext() throws IOException {
+ prepareMessages();
+ uiMessages.setRenderedMessages(prepareSavedMessages());
+ uiMessages.encodeBegin(facesContext);
+ assertNull(uiMessages.getRenderedMessages());
+ }
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#encodeBegin(javax.faces.context.FacesContext)}.
+ * @throws IOException
+ */
+ public void testEncodeBeginAfterUpdate() throws IOException {
+ prepareMessages();
+ ArrayList<FacesMessageWithId> savedMessages = prepareSavedMessages();
+ uiMessages.setRenderedMessages(savedMessages);
+ uiMessages.updateMessages(facesContext, null);
+ uiMessages.encodeBegin(facesContext);
+ assertNotNull(uiMessages.getRenderedMessages());
+ assertSame(savedMessages,uiMessages.getRenderedMessages());
+ assertEquals(6, uiMessages.getRenderedMessages().size());
+ }
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#getSeverenities()}.
+ */
+ public void testGetSeverenities() {
+ uiMessages.setLevel("ALL,ERROR");
+ List<String> severenities = uiMessages.getSeverenities();
+ assertEquals(2, severenities.size());
+ assertTrue(severenities.contains("ALL"));
+ assertTrue(severenities.contains("ERROR"));
+ }
+
+ /**
+ * Test method for {@link org.richfaces.component.UIRichMessages#saveState(javax.faces.context.FacesContext)}.
+ */
+ public void testSaveStateFacesContext() {
+ prepareMessages();
+ uiMessages.getMessages(facesContext);
+ Object state = uiMessages.saveState(facesContext);
+ MockRichMessages newMessages = new MockRichMessages();
+ newMessages.restoreState(facesContext, state);
+ assertNotNull(newMessages.getRenderedMessages());
+ assertEquals(uiMessages.getRenderedMessages().size(), newMessages.getRenderedMessages().size());
+
+ }
+
+
+ public void testAddMessagesForId() throws Exception {
+ List<String> severenities = prepareMessages();
+ severenities.add("ALL");
+ uiMessages.setRenderedMessages(new ArrayList<FacesMessageWithId>());
+ uiMessages.addMessagesForId(facesContext, INPUT_ID, severenities);
+ assertEquals(4, uiMessages.getRenderedMessages().size());
+ }
+
+ public void testAddMessagesForIdNull() throws Exception {
+ List<String> severenities = prepareMessages();
+ uiMessages.setRenderedMessages(new ArrayList<FacesMessageWithId>());
+ uiMessages.addMessagesForId(facesContext, null, severenities);
+ assertEquals(4, uiMessages.getRenderedMessages().size());
+ }
+
+ public void testAddMessagesForIdWithLevels() throws Exception {
+ List<String> severenities = prepareMessages();
+ uiMessages.setRenderedMessages(new ArrayList<FacesMessageWithId>());
+ severenities.add("ERROR");
+ uiMessages.addMessagesForId(facesContext, INPUT_ID, severenities);
+ assertEquals(1, uiMessages.getRenderedMessages().size());
+ }
+ /**
+ * @return
+ */
+ private List<String> prepareMessages() {
+ addMessages(INPUT_ID);
+ addMessages(null);
+ List<String> severenities = new ArrayList<String>();
+ return severenities;
+ }
+
+ /**
+ * @param id TODO
+ *
+ */
+ private void addMessages(String id) {
+ facesContext.addMessage(id, new FacesMessage(FacesMessage.SEVERITY_ERROR,"Error","Error level message"));
+ facesContext.addMessage(id, new FacesMessage(FacesMessage.SEVERITY_FATAL,"Fatal","Fatal level message"));
+ facesContext.addMessage(id, new FacesMessage(FacesMessage.SEVERITY_INFO,"Info","Info level message"));
+ facesContext.addMessage(id, new FacesMessage(FacesMessage.SEVERITY_WARN,"Warn","Warn level message"));
+ }
+
+}
Property changes on: trunk/ui/message/src/test/java/org/richfaces/component/UIMessagesTest.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
17 years, 4 months
JBoss Rich Faces SVN: r11977 - trunk/ui/inplaceSelect/src/main/templates.
by richfaces-svn-commits@lists.jboss.org
Author: abelevich
Date: 2008-12-22 13:48:42 -0500 (Mon, 22 Dec 2008)
New Revision: 11977
Modified:
trunk/ui/inplaceSelect/src/main/templates/inplaceselect.jspx
Log:
https://jira.jboss.org/jira/browse/RF-5408
Modified: trunk/ui/inplaceSelect/src/main/templates/inplaceselect.jspx
===================================================================
--- trunk/ui/inplaceSelect/src/main/templates/inplaceselect.jspx 2008-12-22 15:59:20 UTC (rev 11976)
+++ trunk/ui/inplaceSelect/src/main/templates/inplaceselect.jspx 2008-12-22 18:48:42 UTC (rev 11977)
@@ -39,19 +39,23 @@
String fieldValue = null;
String fieldLabel = null;
+ String fieldInputLabel = null;
if (selectedItemLabel == null) {
fieldValue = null;
fieldLabel = createDefaultLabel(component);
+ fieldInputLabel="";
} else {
fieldValue = (String)value;
- fieldLabel = selectedItemLabel;
+ fieldLabel = selectedItemLabel;
+ fieldInputLabel = fieldLabel;
}
String encodedFieldValue = encodeValue(fieldValue);
variables.setVariable("fieldLabel", fieldLabel);
variables.setVariable("fieldValue", fieldValue);
+ variables.setVariable("fieldInputLabel", fieldInputLabel);
variables.setVariable("encodedFieldValue", encodedFieldValue);
String saveIcon = (String)component.getAttributes().get("saveControlIcon");
@@ -116,7 +120,7 @@
<input id="#{clientId}inplaceTmpValue"
type="text"
style='clip:rect(0px 0px 0px 0px)'
- value="#{fieldLabel}"
+ value="#{fieldInputLabel}"
autocomplete="off"
maxlength='#{component.attributes["inputMaxLength"]}'
readonly="readonly"
17 years, 4 months
JBoss Rich Faces SVN: r11976 - trunk/ui/suggestionbox/src/test/java/org/richfaces/component.
by richfaces-svn-commits@lists.jboss.org
Author: alevkovsky
Date: 2008-12-22 10:59:20 -0500 (Mon, 22 Dec 2008)
New Revision: 11976
Modified:
trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java
Log:
Add JUnits for suggestionBox
Modified: trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java
===================================================================
--- trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java 2008-12-22 15:38:13 UTC (rev 11975)
+++ trunk/ui/suggestionbox/src/test/java/org/richfaces/component/SuggestionBoxComponentTest.java 2008-12-22 15:59:20 UTC (rev 11976)
@@ -21,14 +21,24 @@
package org.richfaces.component;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.MethodExpression;
+import javax.el.MethodInfo;
+import javax.el.PropertyNotFoundException;
import javax.faces.component.UIForm;
import javax.faces.component.UIInput;
import javax.faces.component.html.HtmlForm;
+import javax.faces.el.MethodNotFoundException;
+import org.ajax4jsf.context.AjaxContext;
+import org.ajax4jsf.event.AjaxEvent;
import org.ajax4jsf.tests.AbstractAjax4JsfTestCase;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
@@ -40,6 +50,7 @@
public class SuggestionBoxComponentTest extends AbstractAjax4JsfTestCase {
private static Set javaScripts = new HashSet();
private static final boolean IS_PAGE_AVAILABILITY_CHECK = true;
+ private static String[] SUGGESTION = new String[]{"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
static {
javaScripts.add("org.ajax4jsf.javascript.AjaxScript");
@@ -81,6 +92,8 @@
sb = (UISuggestionBox)application.createComponent("org.richfaces.SuggestionBox");
sb.setId("suggestionBox");
sb.setFor(input.getId());
+ sb.setUsingSuggestObjects(true);
+ sb.setSuggestionAction(action);
form.getChildren().add(sb);
}
@@ -146,4 +159,69 @@
//System.out.println(page.asXml());
assertEquals(getCountValidScripts(page, javaScripts, IS_PAGE_AVAILABILITY_CHECK).intValue(), javaScripts.size());
}
+
+ public void testBroadcast() throws Exception {
+ HtmlPage page = renderView();
+ assertNotNull(page);
+ sb.setFetchValue("1");
+ sb.setSubmitedValue(null, new String[]{"1"});
+
+ sb.broadcast(new AjaxEvent(sb));
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance(facesContext);
+ assertFalse(ajaxContext.getAjaxAreasToRender().isEmpty());
+ assertTrue(ajaxContext.getAjaxAreasToRender().iterator().next().contains(sb.getClientId(facesContext)));
+ Map<String, Object> ajaxResponseData = ajaxContext.getResponseDataMap();
+ Map<String, Object> data = (Map<String, Object>) ajaxResponseData.get("_ajax:data");
+ Object suggestinObjects = data.get("suggestionObjects");
+ assertNotNull(suggestinObjects);
+ assertEquals(Arrays.asList(SUGGESTION), suggestinObjects);
+ Map requestedObjectsObjects = (Map)data.get("requestedObjects");
+ assertNotNull(requestedObjectsObjects);
+ assertEquals(requestedObjectsObjects.get("1"), "1");
+ }
+
+ public void testDecode() throws Exception {
+ HtmlPage page = renderView();
+ assertNotNull(page);
+ sb.setFetchValue("1");
+ sb.setSubmitedValue(Arrays.asList(SUGGESTION), new String[] { "1" });
+ facesContext.getExternalContext().getRequestParameterMap().put(
+ sb.getClientId(facesContext) + "_selection", "1");
+
+ sb.processDecodes(facesContext);
+ assertEquals(1, sb.getRowNumber());
+ }
+
+ MethodExpression action = new MethodExpression(){
+
+ public Object invoke(ELContext context, Object[] params) throws PropertyNotFoundException, MethodNotFoundException,
+ ELException {
+ return Arrays.asList(SUGGESTION);
+ }
+
+ public MethodInfo getMethodInfo(ELContext context) {
+
+ return null;
+ }
+
+ public boolean equals(Object obj) {
+ return (obj instanceof MethodExpression && obj.hashCode() == this.hashCode());
+ }
+
+
+ public String getExpressionString() {
+ return null;
+ }
+
+ public int hashCode() {
+ return 0;
+ }
+
+ public boolean isLiteralText() {
+ return false;
+ }
+
+ };
+
+
}
17 years, 4 months
JBoss Rich Faces SVN: r11975 - in trunk/docs/migrationguide/en/src/main/docbook: included and 1 other directory.
by richfaces-svn-commits@lists.jboss.org
Author: artdaw
Date: 2008-12-22 10:38:13 -0500 (Mon, 22 Dec 2008)
New Revision: 11975
Added:
trunk/docs/migrationguide/en/src/main/docbook/included/panelGridClass.xml
Modified:
trunk/docs/migrationguide/en/src/main/docbook/included/asClientId.xml
trunk/docs/migrationguide/en/src/main/docbook/master.xml
Log:
RF-3048 - Migration guide
Modified: trunk/docs/migrationguide/en/src/main/docbook/included/asClientId.xml
===================================================================
--- trunk/docs/migrationguide/en/src/main/docbook/included/asClientId.xml 2008-12-22 14:25:15 UTC (rev 11974)
+++ trunk/docs/migrationguide/en/src/main/docbook/included/asClientId.xml 2008-12-22 15:38:13 UTC (rev 11975)
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<section id="asClientId" role="asClientId">
+<section id="asClientId" role="new">
<?dbhtml filename="asClientId.html"?>
<sectioninfo>
<keywordset>
Added: trunk/docs/migrationguide/en/src/main/docbook/included/panelGridClass.xml
===================================================================
--- trunk/docs/migrationguide/en/src/main/docbook/included/panelGridClass.xml (rev 0)
+++ trunk/docs/migrationguide/en/src/main/docbook/included/panelGridClass.xml 2008-12-22 15:38:13 UTC (rev 11975)
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<section id="panelGridClass" role="new">
+ <?dbhtml filename="panelGridClass.html"?>
+ <sectioninfo>
+ <keywordset>
+ <keyword>panelGrid</keyword>
+ <keyword>class</keyword>
+ </keywordset>
+ </sectioninfo>
+ <title><h:panelGrid>: column classes are encoded in a wrong way</title>
+ <section>
+ <title>Description</title>
+ <para>
+ The column classes of <emphasis role="bold"><property><h:panelGrid></property></emphasis> are encoded in a wrong way: only the first <emphasis role="bold"><property><td></property></emphasis> element in a table has the class specified in the <emphasis><property>"columnClasses"</property></emphasis> attribute.
+ </para>
+ </section>
+ <section>
+ <title>Links</title>
+ <itemizedlist>
+ <listitem>
+ <para>
+ <ulink url="https://jira.jboss.org/jira/browse/RF-5424">Jira</ulink>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <ulink url="https://javaserverfaces.dev.java.net/issues/show_bug.cgi?id=900">JavaServer Faces issues</ulink>
+ </para>
+ </listitem>
+ </itemizedlist>
+ </section>
+ <section>
+ <title>How to reproduce</title>
+ <para>
+ Place <code><h:panelGrid columns="3" columnClasses="cell"></code> on a page and specify styles for the <code>.cell</code> class. As the result only the first <emphasis role="bold"><property><td></property></emphasis> in a table has this class.
+ </para>
+ </section>
+ <section>
+ <title>Causes</title>
+ <para>
+ It is a defect in JSF-RI 1.2.10 and JSF-RI 1.2_11.
+ </para>
+ </section>
+
+ <section>
+ <title>Workarounds</title>
+ <para>
+ The solution is to use as many <emphasis><property>"columnClasses"</property></emphasis> attributes as columns in the <emphasis role="bold"><property><h:panelGrid></property></emphasis>.
+ </para>
+ </section>
+</section>
Property changes on: trunk/docs/migrationguide/en/src/main/docbook/included/panelGridClass.xml
___________________________________________________________________
Name: svn:executable
+ *
Modified: trunk/docs/migrationguide/en/src/main/docbook/master.xml
===================================================================
--- trunk/docs/migrationguide/en/src/main/docbook/master.xml 2008-12-22 14:25:15 UTC (rev 11974)
+++ trunk/docs/migrationguide/en/src/main/docbook/master.xml 2008-12-22 15:38:13 UTC (rev 11975)
@@ -21,7 +21,9 @@
<!ENTITY myfaces SYSTEM "included/myfaces.xml">
<!ENTITY seamMultipartFilter SYSTEM "included/seamMultipartFilter.xml">
- <!ENTITY asClientId SYSTEM "included/asClientId.xml">
+ <!ENTITY asClientId SYSTEM "included/asClientId.xml">
+ <!ENTITY panelGridClass SYSTEM "included/panelGridClass.xml">
+
]>
<book>
<bookinfo>
@@ -138,6 +140,23 @@
However, <ulink url="http://jira.jboss.com/jira/browse/RF">Jira</ulink> contains all issues
and if you can not find your case there, please, feel free to report it.
</para>
+ <section id="MostImportant32to33">
+ <?dbhtml filename="MostImportant32to33.html"?>
+ <sectioninfo>
+ <keywordset>
+ <keyword>important</keyword>
+ <keyword>issues</keyword>
+ </keywordset>
+ </sectioninfo>
+ <title>Most important issues</title>
+ <para>
+ Migrating to <property>RichFaces 3.2.x</property> you can encounter
+ with malfunction of the components caused by a number of reasons.
+ However, most of the problems can be positively solved.
+ This section covers the most significant issues you can potentially encounter, providing ways to handle the cases.
+ </para>
+&panelGridClass;
+ </section>
<section id="ThirdPartyFrameworks32to33">
<?dbhtml filename="ThirdPartyFrameworks32to33.html"?>
<sectioninfo>
17 years, 4 months
JBoss Rich Faces SVN: r11974 - trunk/test-applications/jsp/src/main/webapp/styles.
by richfaces-svn-commits@lists.jboss.org
Author: mvitenkov
Date: 2008-12-22 09:25:15 -0500 (Mon, 22 Dec 2008)
New Revision: 11974
Modified:
trunk/test-applications/jsp/src/main/webapp/styles/styles.css
Log:
change bgcolor for body
Modified: trunk/test-applications/jsp/src/main/webapp/styles/styles.css
===================================================================
--- trunk/test-applications/jsp/src/main/webapp/styles/styles.css 2008-12-22 13:54:39 UTC (rev 11973)
+++ trunk/test-applications/jsp/src/main/webapp/styles/styles.css 2008-12-22 14:25:15 UTC (rev 11974)
@@ -3,7 +3,7 @@
float: right;
}
-/* Editor */
+/** Editor */
.EditorStyleClass {
}
@@ -275,9 +275,10 @@
}
.body {
- background-color: purple;
+ background-color: #FFFFFF;
}
.test {
color: green;
+ background-image:url(/*/image.gif)
}
\ No newline at end of file
17 years, 4 months