Author: sergeyhalipov
Date: 2008-03-19 11:25:53 -0400 (Wed, 19 Mar 2008)
New Revision: 6957
Modified:
trunk/ui/modal-panel/src/main/config/component/modalPanel.xml
trunk/ui/modal-panel/src/main/java/org/richfaces/component/UIModalPanel.java
trunk/ui/modal-panel/src/main/java/org/richfaces/renderkit/ModalPanelRendererBase.java
trunk/ui/modal-panel/src/main/resources/org/richfaces/renderkit/html/scripts/modalPanel.js
Log:
http://jira.jboss.com/jira/browse/RF-2464
Modified: trunk/ui/modal-panel/src/main/config/component/modalPanel.xml
===================================================================
--- trunk/ui/modal-panel/src/main/config/component/modalPanel.xml 2008-03-19 15:25:40 UTC
(rev 6956)
+++ trunk/ui/modal-panel/src/main/config/component/modalPanel.xml 2008-03-19 15:25:53 UTC
(rev 6957)
@@ -152,9 +152,9 @@
<defaultvalue>false</defaultvalue>
</property>
- <property>
+ <property el="true">
<name>visualOptions</name>
- <classname>java.util.Map</classname>
+ <classname>java.lang.Object</classname>
<description>Defines options that were specified on the client
side</description>
<defaultvalue/>
</property>
Modified: trunk/ui/modal-panel/src/main/java/org/richfaces/component/UIModalPanel.java
===================================================================
---
trunk/ui/modal-panel/src/main/java/org/richfaces/component/UIModalPanel.java 2008-03-19
15:25:40 UTC (rev 6956)
+++
trunk/ui/modal-panel/src/main/java/org/richfaces/component/UIModalPanel.java 2008-03-19
15:25:53 UTC (rev 6957)
@@ -24,10 +24,15 @@
import java.util.HashMap;
import java.util.Map;
+import javax.el.ELException;
+import javax.el.ValueExpression;
+import javax.faces.FacesException;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
+import org.richfaces.json.JSONException;
+import org.richfaces.json.JSONMap;
import org.richfaces.skin.Skin;
import org.richfaces.skin.SkinFactory;
@@ -39,9 +44,9 @@
public static final String COMPONENT_TYPE = "org.richfaces.ModalPanel";
- private static final String COMPONENT_FAMILY = "org.richfaces.ModalPanel";
+ public static final String COMPONENT_FAMILY = "org.richfaces.ModalPanel";
- private Map visualOptions;
+ private Map<String, String> visualOptions;
/**
* Shadow depth.
@@ -124,13 +129,24 @@
return shadowStyle;
}
- public Map getVisualOptions() {
- if (null == visualOptions)
- visualOptions = new HashMap();
- return visualOptions;
+ public Object getVisualOptions() {
+ ValueExpression ve = getValueExpression("visualOptions");
+ if (null != ve) {
+ try {
+ Object value = ve.getValue(getFacesContext().getELContext());
+ return prepareVisualOptions(value);
+ } catch (ELException e) {
+ throw new FacesException(e);
+ }
+ }
+
+ if (null == this.visualOptions) {
+ this.visualOptions = new HashMap<String, String>();
+ }
+ return this.visualOptions;
}
- public void setVisualOptions(Map visualOptions) {
- this.visualOptions = visualOptions;
+ public void setVisualOptions(Object visualOptions) {
+ this.visualOptions = prepareVisualOptions(visualOptions);
}
/**
@@ -163,4 +179,29 @@
return !isAutosized();
}
}
+
+ protected Map<String, String> prepareVisualOptions(Object value) {
+ if (null == value) {
+ if (null == this.visualOptions) {
+ this.visualOptions = new HashMap<String, String>();
+ }
+ return this.visualOptions;
+ } else if (value instanceof Map) {
+ return (Map<String, String>) value;
+ } else if (value instanceof String) {
+ String s = (String) value;
+ if (!s.startsWith("{")) {
+ s = "{" + s + "}";
+ }
+ try {
+ return new JSONMap(s);
+ } catch (JSONException e) {
+ throw new FacesException(e);
+ }
+ } else {
+ throw new FacesException("Attribute visualOptions of component [" +
+ this.getClientId(getFacesContext()) + "] must be instance of Map or String,
but its type is " +
+ value.getClass().getSimpleName());
+ }
+ }
}
Modified:
trunk/ui/modal-panel/src/main/java/org/richfaces/renderkit/ModalPanelRendererBase.java
===================================================================
---
trunk/ui/modal-panel/src/main/java/org/richfaces/renderkit/ModalPanelRendererBase.java 2008-03-19
15:25:40 UTC (rev 6956)
+++
trunk/ui/modal-panel/src/main/java/org/richfaces/renderkit/ModalPanelRendererBase.java 2008-03-19
15:25:53 UTC (rev 6957)
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
+import java.util.Map.Entry;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
@@ -55,25 +56,27 @@
"SWU", "W", "NWL"
};
+ @SuppressWarnings("unchecked")
protected void doDecode(FacesContext context, UIComponent component) {
super.doDecode(context, component);
UIModalPanel panel = (UIModalPanel)component;
ExternalContext exCtx = context.getExternalContext();
- Map rqMap = exCtx.getRequestParameterMap();
+ Map<String, String> rqMap = exCtx.getRequestParameterMap();
Object clnId = rqMap.get(panel.getClientId(context) + "OpenedState");
if (panel.isKeepVisualState()) {
if (null != clnId) {
panel.setShowWhenRendered(new Boolean((String) clnId).booleanValue());
- Iterator it = rqMap.entrySet().iterator();
+ Map<String, String> visualOptions = (Map<String, String>)
panel.getVisualOptions();
+ Iterator<Entry<String, String>> it = rqMap.entrySet().iterator();
while ( it.hasNext()) {
- Map.Entry entry = (Map.Entry)it.next();
+ Map.Entry<String, String> entry = it.next();
int suffixPos = entry.getKey().toString().indexOf(STATE_OPTION_SUFFIX);
if (-1 != suffixPos) {
String key = entry.getKey().toString().substring(suffixPos +
STATE_OPTION_SUFFIX.length());
- panel.getVisualOptions().put(key, entry.getValue());
+ visualOptions.put(key, entry.getValue());
}
}
}
@@ -122,7 +125,7 @@
String onbeforeshow =
ScriptUtils.toScript(panel.getAttributes().get("onbeforeshow"));
variables.setVariable("onbeforeshow", onbeforeshow);
String onmove =
ScriptUtils.toScript(panel.getAttributes().get("onmove"));
-
+ variables.setVariable("onmove", onmove);
}
@@ -134,6 +137,7 @@
return true;
}
+ @SuppressWarnings("unchecked")
public String getShowScript(FacesContext context, UIModalPanel panel) {
StringBuffer result = new StringBuffer();
@@ -141,9 +145,9 @@
result.append("Event.observe(window, \"load\", function() {");
result.append("Richfaces.showModalPanel('" + panel.getClientId(context)
+ "', {");
- Iterator it = panel.getVisualOptions().entrySet().iterator();
+ Iterator<Map.Entry<String, String>> it = ((Map<String, String>)
panel.getVisualOptions()).entrySet().iterator();
while (it.hasNext()) {
- Map.Entry entry = (Map.Entry)it.next();
+ Map.Entry<String, String> entry = it.next();
result.append(entry.getKey() + ": '" + entry.getValue() +
"'");
if (it.hasNext()) {
Modified:
trunk/ui/modal-panel/src/main/resources/org/richfaces/renderkit/html/scripts/modalPanel.js
===================================================================
---
trunk/ui/modal-panel/src/main/resources/org/richfaces/renderkit/html/scripts/modalPanel.js 2008-03-19
15:25:40 UTC (rev 6956)
+++
trunk/ui/modal-panel/src/main/resources/org/richfaces/renderkit/html/scripts/modalPanel.js 2008-03-19
15:25:53 UTC (rev 6957)
@@ -827,8 +827,8 @@
var input = document.createElement("input");
input.type = "hidden";
- input.id = this.id.id + "OpenedState";
- input.name = this.id.id + "OpenedState";
+ input.id = this.markerId.id + "OpenedState";
+ input.name = this.markerId.id + "OpenedState";
input.value = this.shown ? "true" : "false";
target.appendChild(input);