Author: a.izobov
Date: 2007-09-19 09:13:37 -0400 (Wed, 19 Sep 2007)
New Revision: 2999
Added:
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/SelectSuggestionEvent.java
Modified:
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js
Log:
http://jira.jboss.com/jira/browse/RF-923
Added:
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/SelectSuggestionEvent.java
===================================================================
---
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/SelectSuggestionEvent.java
(rev 0)
+++
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/SelectSuggestionEvent.java 2007-09-19
13:13:37 UTC (rev 2999)
@@ -0,0 +1,23 @@
+package org.richfaces.component;
+
+import javax.faces.component.UIComponent;
+import javax.faces.event.FacesEvent;
+import javax.faces.event.FacesListener;
+
+public class SelectSuggestionEvent extends FacesEvent {
+
+ private static final long serialVersionUID = 1L;
+
+ public SelectSuggestionEvent(UIComponent component) {
+ super(component);
+ }
+
+ public boolean isAppropriateListener(FacesListener listener) {
+ return false;
+ }
+
+ public void processListener(FacesListener listener) {
+ throw new UnsupportedOperationException();
+ }
+
+}
Modified:
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java
===================================================================
---
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java 2007-09-19
12:09:42 UTC (rev 2998)
+++
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java 2007-09-19
13:13:37 UTC (rev 2999)
@@ -21,12 +21,15 @@
package org.richfaces.component;
+import java.util.Map;
+
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.el.MethodBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
+import javax.faces.event.PhaseId;
import org.ajax4jsf.component.AjaxComponent;
import org.ajax4jsf.context.AjaxContext;
@@ -273,7 +276,18 @@
/* (non-Javadoc)
* @see javax.faces.component.UIData#broadcast(javax.faces.event.FacesEvent)
*/
- public final void broadcast(final FacesEvent event)
+
+ private int rowNumber = -1;
+
+ public int getRowNumber() {
+ return rowNumber;
+ }
+
+ public void setRowNumber(int rowNumber) {
+ this.rowNumber = rowNumber;
+ }
+
+ public final void broadcast(final FacesEvent event)
throws AbortProcessingException {
super.broadcast(event);
if (event instanceof AjaxEvent) {
@@ -285,10 +299,52 @@
AjaxContext.getCurrentInstance(context)
.renderSubmittedAjaxRegion(context, true);
}
+ } else if (event instanceof SelectSuggestionEvent) {
+ setValue(null);
}
}
- public void addAjaxListener(final AjaxListener listener) {
+ public void queueEvent(FacesEvent event) {
+ if (event instanceof SelectSuggestionEvent) {
+ event.setPhaseId(PhaseId.RENDER_RESPONSE);
+ super.queueEvent(event);
+ } else if (event.getComponent() != this && rowNumber != -1) {
+ int prevIndex = getRowIndex();
+ setRowIndex(rowNumber);
+ super.queueEvent(event);
+ setRowIndex(prevIndex);
+ } else {
+ super.queueEvent(event);
+ }
+
+ }
+
+ public void processDecodes(FacesContext context) {
+ if (!this.isRendered())
+ return;
+ Map requestParameterMap = context.getExternalContext().getRequestParameterMap();
+ String clientId = getClientId(context);
+ String rowValue =
(String)requestParameterMap.get(clientId+"_selection");
+ if (rowValue != null && rowValue.length()!=0) {
+ setRowNumber(Integer.parseInt(rowValue)+getFirst());
+ setupValue(context);
+ queueEvent(new SelectSuggestionEvent(this));
+ } else {
+ setRowNumber(-1);
+ }
+ super.processDecodes(context);
+ }
+
+ public void setupValue(FacesContext context) {
+ Object value = getSubmitedValue();
+ MethodBinding suggestingAction = getSuggestionAction();
+ if (null != suggestingAction) {
+ setValue(suggestingAction.invoke(
+ context, new Object[]{value}));
+ }
+ }
+
+ public void addAjaxListener(final AjaxListener listener) {
addFacesListener(listener);
}
@@ -299,4 +355,5 @@
public void removeAjaxListener(final AjaxListener listener) {
removeFacesListener(listener);
}
+
}
Modified:
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java
===================================================================
---
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java 2007-09-19
12:09:42 UTC (rev 2998)
+++
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java 2007-09-19
13:13:37 UTC (rev 2999)
@@ -221,6 +221,15 @@
writer.writeAttribute(
"style",
"position:absolute;display:none;z-index:" + zIndex + ";", null);
writer.endElement("iframe");
+
+ writer.startElement("input", component);
+ writer.writeAttribute("type", "hidden", null);
+ writer.writeAttribute("id", component.getClientId(context)
+ + "_selection", null);
+ writer.writeAttribute("name", component.getClientId(context)
+ + "_selection", null);
+ writer.endElement("input");
+
} else {
suggestionBox.setSubmitted(false);
}
@@ -243,13 +252,7 @@
throws IOException {
UISuggestionBox suggestionBox = (UISuggestionBox) component;
if (suggestionBox.isSubmitted()) {
- Object value = suggestionBox.getSubmitedValue();
- MethodBinding suggestingAction = suggestionBox.getSuggestionAction();
- if (null != suggestingAction) {
- // TODO - use converter
- suggestionBox.setValue(suggestingAction.invoke(
- context, new Object[]{value}));
- }
+ suggestionBox.setupValue(context);
body.encode(getTemplateContext(context, suggestionBox));
// Replace rendered area ID from component to suggestion table
suggestionBox.setRowIndex(-1);
Modified:
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js
===================================================================
---
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js 2007-09-19
12:09:42 UTC (rev 2998)
+++
trunk/ui/suggestionbox/src/main/resources/org/richfaces/renderkit/html/scripts/suggestionbox.js 2007-09-19
13:13:37 UTC (rev 2999)
@@ -17,6 +17,8 @@
this.oldValue = this.element.value;
this.skipHover = false;
+ options.selection = update + "_selection";
+
var needIframe = (RichFaces.navigatorType() == "MSIE");
if (needIframe) {
@@ -540,6 +542,10 @@
selectEntry: function(event) {
this.active = false;
+
+ var input = $(this.options.selection);
+ input.value = this.index;
+
this.updateElement(this.getCurrentEntry());
if (this.options.onselect) {
this.options.onselect(this, event);
@@ -547,6 +553,7 @@
if (this.update.onselect) {
this.update.onselect(this, event);
}
+ input.value = "";
},
updateElement: function(selectedElement) {