Author: akushunin
Date: 2008-03-04 09:58:11 -0500 (Tue, 04 Mar 2008)
New Revision: 6529
Modified:
trunk/ui/suggestionbox/src/main/config/component/suggestionbox.xml
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java
Log:
http://jira.jboss.com/jira/browse/RF-1774
Modified: trunk/ui/suggestionbox/src/main/config/component/suggestionbox.xml
===================================================================
--- trunk/ui/suggestionbox/src/main/config/component/suggestionbox.xml 2008-03-04 14:03:17
UTC (rev 6528)
+++ trunk/ui/suggestionbox/src/main/config/component/suggestionbox.xml 2008-03-04 14:58:11
UTC (rev 6529)
@@ -352,6 +352,9 @@
It isn't selectable and list is closed as always after click on it and nothing is
put to input.
</description>
</property>
-
+ <property>
+ <name>selectedObjects</name>
+ <classname>java.lang.Object</classname>
+ </property>
</component>
</components>
Modified:
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java
===================================================================
---
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java 2008-03-04
14:03:17 UTC (rev 6528)
+++
trunk/ui/suggestionbox/src/main/java/org/richfaces/component/UISuggestionBox.java 2008-03-04
14:58:11 UTC (rev 6529)
@@ -105,6 +105,11 @@
public abstract void setData(Object data);
public abstract Object getData();
+
+ public abstract Object getSelectedObjects();
+
+ public abstract void setSelectedObjects(Object so);
+
/**
@@ -347,7 +352,9 @@
} else {
setRowNumber(-1);
}
- super.processDecodes(context);
+ Object selectedObject =
requestParameterMap.get(clientId+"_hiddenFetchValue");
+ setSelectedObjects(selectedObject);
+ super.processDecodes(context);
}
public void setupValue(FacesContext context) {
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 2008-03-04
14:03:17 UTC (rev 6528)
+++
trunk/ui/suggestionbox/src/main/java/org/richfaces/renderkit/html/SuggestionBoxRenderer.java 2008-03-04
14:58:11 UTC (rev 6529)
@@ -61,763 +61,820 @@
* Renderer for SuggestionBox component.
*/
public class SuggestionBoxRenderer extends AjaxComponentRendererBase {
- /**
- * Component options.
- */
- private static final String[] OPTIONS = {"popupClass",
"popupStyle",
- "width", "height", "entryClass",
"selectedClass", "param",
- "frequency", "minChars", "tokens",
"rows", "selectValueClass" };
+ /**
+ * Component options.
+ */
+ private static final String[] OPTIONS = { "popupClass",
"popupStyle",
+ "width", "height", "entryClass",
"selectedClass", "param",
+ "frequency", "minChars", "tokens", "rows",
"selectValueClass" };
- /**
- * Shadow depth.
- */
- public static final int SHADOW_DEPTH = 4;
+ /**
+ * Shadow depth.
+ */
+ public static final int SHADOW_DEPTH = 4;
- /**
- * Styles.
- */
- private InternetResource[] styles = {new TemplateCSSResource(
- "org/richfaces/renderkit/html/css/suggestionbox.xcss")};
+ /**
+ * Styles.
+ */
+ private InternetResource[] styles = { new TemplateCSSResource(
+ "org/richfaces/renderkit/html/css/suggestionbox.xcss") };
- /**
- * Additional scripts.
- */
- private final InternetResource[] additionalScripts = {
- new org.ajax4jsf.javascript.PrototypeScript(),
- new org.ajax4jsf.javascript.SmartPositionScript(),
- getResource("/org/richfaces/renderkit/html/scripts/browser_info.js"),
- getResource("scripts/scriptaculo.js"),
- getResource("scripts/suggestionbox.js")};
+ /**
+ * Additional scripts.
+ */
+ private final InternetResource[] additionalScripts = {
+ new org.ajax4jsf.javascript.PrototypeScript(),
+ new org.ajax4jsf.javascript.SmartPositionScript(),
+ getResource("/org/richfaces/renderkit/html/scripts/browser_info.js"),
+ getResource("scripts/scriptaculo.js"),
+ getResource("scripts/suggestionbox.js") };
- /**
- * Template for table.
- */
- private PreparedTemplate body = HtmlCompiler
- .compileResource("org/richfaces/renderkit/html/templates/table.jspx");
+ /**
+ * Template for table.
+ */
+ private PreparedTemplate body = HtmlCompiler
+ .compileResource("org/richfaces/renderkit/html/templates/table.jspx");
- /**
- * Template for popup.
- */
- private PreparedTemplate popup = HtmlCompiler
- .compileResource("org/richfaces/renderkit/html/templates/popup.jspx");
+ /**
+ * Template for popup.
+ */
+ private PreparedTemplate popup = HtmlCompiler
+ .compileResource("org/richfaces/renderkit/html/templates/popup.jspx");
- /**
- * Gets component class.
- *
- * @return component class
- */
- protected final Class getComponentClass() {
- return UISuggestionBox.class;
- }
+ /**
+ * Gets component class.
+ *
+ * @return component class
+ */
+ protected final Class getComponentClass() {
+ return UISuggestionBox.class;
+ }
- /**
- * Is render children.
- *
- * @return boolean
- */
- public final boolean getRendersChildren() {
- return true;
- }
+ /**
+ * Is render children.
+ *
+ * @return boolean
+ */
+ public final boolean getRendersChildren() {
+ return true;
+ }
- /**
- * Decode.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- *
- * @see org.ajax4jsf.framework.renderer.RendererBase#doDecode(
- * javax.faces.context.FacesContext,
- * javax.faces.component.UIComponent)
- */
- protected final void doDecode(final FacesContext context,
- final UIComponent component) {
- String clientId = component.getClientId(context);
- Map requestParameterMap = context.getExternalContext()
- .getRequestParameterMap();
- String reqValue = (String) requestParameterMap.get(clientId);
- if (reqValue != null && reqValue.equals(clientId)) {
- String paramName = (String)
component.getAttributes().get("param");
- if (null == paramName) {
- paramName = "inputvalue";
- }
- Object elementValue = requestParameterMap.get(paramName);
- ((UISuggestionBox)component).setSubmitedValue(elementValue);
- component.queueEvent(
- new AjaxSuggestionEvent(component, elementValue));
- }
- }
+ /**
+ * Decode.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ *
+ * @see org.ajax4jsf.framework.renderer.RendererBase#doDecode(
+ * javax.faces.context.FacesContext, javax.faces.component.UIComponent)
+ */
+ protected final void doDecode(final FacesContext context,
+ final UIComponent component) {
+ String clientId = component.getClientId(context);
+ Map requestParameterMap = context.getExternalContext()
+ .getRequestParameterMap();
+ String reqValue = (String) requestParameterMap.get(clientId);
+ if (reqValue != null && reqValue.equals(clientId)) {
+ String paramName = (String) component.getAttributes().get("param");
+ if (null == paramName) {
+ paramName = "inputvalue";
+ }
+ Object elementValue = requestParameterMap.get(paramName);
+ ((UISuggestionBox) component).setSubmitedValue(elementValue);
+ component.queueEvent(new AjaxSuggestionEvent(component,
+ elementValue));
+ }
+ }
- /**
- * Encode begin.
- *
- * @param writer {@link javax.faces.context.ResponseWriter}
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @throws IOException
- *
- * @see {@link org.ajax4jsf.framework.renderer.RendererBase#doEncodeBegin}
- */
- protected final void doEncodeBegin(final ResponseWriter writer,
- final FacesContext context,
- final UIComponent component)
- throws IOException {
- super.doEncodeBegin(writer, context, component);
- org.richfaces.component.util.FormUtil.throwEnclFormReqExceptionIfNeed(
- context, component);
- }
+ /**
+ * Encode begin.
+ *
+ * @param writer
+ * {@link javax.faces.context.ResponseWriter}
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @throws IOException
+ *
+ * @see {@link org.ajax4jsf.framework.renderer.RendererBase#doEncodeBegin}
+ */
+ protected final void doEncodeBegin(final ResponseWriter writer,
+ final FacesContext context, final UIComponent component)
+ throws IOException {
+ super.doEncodeBegin(writer, context, component);
+ org.richfaces.component.util.FormUtil.throwEnclFormReqExceptionIfNeed(
+ context, component);
+ }
- /**
- * Encode end.
- *
- * @param writer {@link javax.faces.context.ResponseWriter}
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @throws IOException
- *
- * @see {@link org.ajax4jsf.framework.renderer.RendererBase#doEncodeEnd}
- */
- protected void doEncodeEnd(final ResponseWriter writer,
- final FacesContext context,
- final UIComponent component) throws IOException {
- UISuggestionBox suggestionBox = (UISuggestionBox) component;
-
- if (!suggestionBox.isSubmitted()) {
- suggestionBox.setRowIndex(-1);
- writer.startElement(HTML.DIV_ELEM, component);
- getUtils().encodeId(context, component);
+ protected void writeExplicitMarkup(ResponseWriter writer,
+ UISuggestionBox suggestionBox) {
- StringBuffer clazz = new StringBuffer(
- "dr-sb-common-container rich-sb-common-container ");
- clazz.append(suggestionBox.getPopupClass() + " ").
- append(suggestionBox.getStyleClass());
- writer.writeAttribute("class", clazz, "popupClass");
+ String forAttribute = suggestionBox.getFor();
+ if (forAttribute != null && forAttribute.length() > 0) {
+
+ }
+ }
- int zIndex = suggestionBox.getZindex();
+ /**
+ * Encode end.
+ *
+ * @param writer
+ * {@link javax.faces.context.ResponseWriter}
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @throws IOException
+ *
+ * @see {@link org.ajax4jsf.framework.renderer.RendererBase#doEncodeEnd}
+ */
+ protected void doEncodeEnd(final ResponseWriter writer,
+ final FacesContext context, final UIComponent component)
+ throws IOException {
+ UISuggestionBox suggestionBox = (UISuggestionBox) component;
- StringBuffer style = new StringBuffer("display:none; z-index: " +
(zIndex + 1) + ";");
+ if (!suggestionBox.isSubmitted()) {
+ suggestionBox.setRowIndex(-1);
- style.append(getSizeForStyle(component, "width", null, false));
- style.append(getSizeForStyle(component, "height", null, false));
+ writer.startElement(HTML.DIV_ELEM, component);
+ getUtils().encodeId(context, component);
- style.append(suggestionBox.getPopupStyle() + ";").
- append(suggestionBox.getStyle() + ";");
- writer.writeAttribute("style", style, "popupStyle");
+ StringBuffer clazz = new StringBuffer(
+ "dr-sb-common-container rich-sb-common-container ");
+ clazz.append(suggestionBox.getPopupClass() + " ").append(
+ suggestionBox.getStyleClass());
+ writer.writeAttribute("class", clazz, "popupClass");
- UIComponent popupFacet = component.getFacet("popup");
- if (null == popupFacet) {
- popup.encode(this, context, component);
- } else {
- // Use facet as content of popup window
- // suggestionBox.setPopup(popupFacet.getClientId(context));
- renderChild(context, popupFacet);
- }
- writer.startElement(HTML.SCRIPT_ELEM, component);
- writer.writeText(getScript(context, component), "script");
- writer.endElement(HTML.SCRIPT_ELEM);
- writer.endElement(HTML.DIV_ELEM);
- writer.startElement("iframe", component);
- writer.writeAttribute("src",
- getResource("/org/richfaces/renderkit/html/images/spacer.gif")
- .getUri(context, null), null);
- writer.writeAttribute("id", component.getClientId(context)
- + "_iframe", null);
- 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)
- + "_hiddenFetchValue", null);
- writer.writeAttribute("name", component.getClientId(context)
- + "_hiddenFetchValue", null);
- writer.endElement("input");
+ int zIndex = suggestionBox.getZindex();
- 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);
- }
+ StringBuffer style = new StringBuffer("display:none; z-index: "
+ + (zIndex + 1) + ";");
- // Fix for bug CH-1323.
- ((UISuggestionBox) component).setValue(null);
- }
+ style.append(getSizeForStyle(component, "width", null, false));
+ style.append(getSizeForStyle(component, "height", null, false));
- /**
- * Encode children.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @throws IOException
- *
- * @see javax.faces.render.Renderer#encodeChildren
- */
- public void encodeChildren(final FacesContext context,
- final UIComponent component)
- throws IOException {
- UISuggestionBox suggestionBox = (UISuggestionBox) component;
- if (suggestionBox.isSubmitted()) {
- suggestionBox.setupValue(context);
- body.encode(getTemplateContext(context, suggestionBox));
-
- Object[] values = ((Collection)suggestionBox.getValue()).toArray();
- //Object hiddenFetchValue = suggestionBox.getHiddenFetchValue();
- Collection data = new ArrayList();
- for(int i=0;i<values.length;i++){
-
- String var = (String)suggestionBox.getAttributes().get("var");
- context.getExternalContext().getRequestMap().put(var, values[i]);
- if(suggestionBox.getHiddenFetchValue()!=null){
- data.add(suggestionBox.getHiddenFetchValue());
- }else{
- data.add(suggestionBox.getFetchValue());
- }
-
-
- }
- suggestionBox.setData(data);
- // Replace rendered area ID from component to suggestion table
- suggestionBox.setRowIndex(-1);
- AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
- ajaxContext.removeRenderedArea(component.getClientId(context));
- ajaxContext.addRenderedArea(getContentId(context, component));
- }
- }
+ style.append(suggestionBox.getPopupStyle() + ";").append(
+ suggestionBox.getStyle() + ";");
+ writer.writeAttribute("style", style, "popupStyle");
- /**
- * Gets component.
- *
- * @param component {@link javax.faces.component.UIComponent}
- * @return component
- */
- private UIComponent getTarget(final UIComponent component) {
- String target = ((UISuggestionBox) component).getFor();
- if (null != target) {
- target = RendererUtils.getInstance().correctForIdReference(target,component);
- // Use parent since UIData - naming container
- UIComponent targetComponent = RendererUtils.getInstance().
- findComponentFor(component, target);
- if (null != targetComponent) {
- return targetComponent;
- } else {
- throw new FacesException("Component for target " + target
- + " not found in SuggestionBox " + component.getId());
- }
- } else {
- throw new FacesException("Component SuggestionBox "
- + component.getId() + " don't have property 'for'
");
- }
- }
+ UIComponent popupFacet = component.getFacet("popup");
+ if (null == popupFacet) {
+ popup.encode(this, context, component);
+ } else {
+ // Use facet as content of popup window
+ // suggestionBox.setPopup(popupFacet.getClientId(context));
+ renderChild(context, popupFacet);
+ }
+ writer.startElement(HTML.SCRIPT_ELEM, component);
+ writer.writeText(getScript(context, component), "script");
+ writer.endElement(HTML.SCRIPT_ELEM);
+ writer.endElement(HTML.DIV_ELEM);
+ writer.startElement("iframe", component);
+ writer.writeAttribute("src", getResource(
+ "/org/richfaces/renderkit/html/images/spacer.gif").getUri(
+ context, null), null);
+ writer.writeAttribute("id", component.getClientId(context)
+ + "_iframe", null);
+ writer.writeAttribute("style",
+ "position:absolute;display:none;z-index:" + zIndex + ";",
+ null);
+ writer.endElement("iframe");
- /**
- * Gets script.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return script
- */
- private String getScript(final FacesContext context,
- final UIComponent component) {
- Map attributes = component.getAttributes();
- StringBuffer script = new StringBuffer(" new ");
- // Build ajax function call
- JSFunction submitSuggest = AjaxRendererUtils.buildAjaxFunction(
- component, context, "RichFaces.Suggestion");
- UIComponent targetComponent = getTarget(component);
- submitSuggest.addParameter(targetComponent.getClientId(context));
- submitSuggest.addParameter(component.getClientId(context));
- submitSuggest.addParameter(component.getAttributes().get("onsubmit"));
- Map options = AjaxRendererUtils.buildEventOptions(context, component);
- options.put("popup", component.getClientId(context));
- for (int i = 0; i < OPTIONS.length; i++) {
- String option = OPTIONS[i];
- Object value = attributes.get(option);
- if (null != value) {
- options.put(option, value);
- }
- }
- // If ajax queue name not set, put clientId
- String eventsQueue = (String) options.get("eventsQueue");
- if (null == eventsQueue) {
- options.put("eventsQueue", component.getClientId(context));
- }
- String onselect = (String) attributes.get("onselect");
- if (null != onselect) {
- JSFunctionDefinition function = new JSFunctionDefinition(
- "suggestion");
- function.addParameter("event");
- function.addToBody(onselect);
+ writer.startElement("input", component);
+ writer.writeAttribute("type", "hidden", null);
+ writer.writeAttribute("id", component.getClientId(context)
+ + "_hiddenFetchValue", null);
+ writer.writeAttribute("name", component.getClientId(context)
+ + "_hiddenFetchValue", null);
+ writer.endElement("input");
- options.put("onselect", function);
+ 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");
- }
- if (component.getValueBinding("fetchValue") != null
- || attributes.get("fetchValue") != null) {
- options.put("select",
attributes.get("selectValueClass"));
- }
+ } else {
+ suggestionBox.setSubmitted(false);
+ }
- submitSuggest.addParameter(options);
- script.append(submitSuggest.toScript()).append(";\n");
- return script.toString();
- }
+ // Fix for bug CH-1323.
+ ((UISuggestionBox) component).setValue(null);
+ }
- /**
- * Gets template.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param data
- * @return {@link org.ajax4jsf.framework.renderer.compiler.TemplateContext}
- */
- private TemplateContext getTemplateContext(final FacesContext context,
- final UIData data) {
- data.setRowIndex(-1);
- return new DataTemplateContext(this, context, data);
- }
+ /**
+ * Encode children.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @throws IOException
+ *
+ * @see javax.faces.render.Renderer#encodeChildren
+ */
+ public void encodeChildren(final FacesContext context,
+ final UIComponent component) throws IOException {
+ UISuggestionBox suggestionBox = (UISuggestionBox) component;
+ if (suggestionBox.isSubmitted()) {
+ suggestionBox.setupValue(context);
+ body.encode(getTemplateContext(context, suggestionBox));
- /**
- * Special html templates context class with pre-defined properties for
- * iterations over rows and columns.
- *
- * @author shura (latest modification by $Author: alexsmirnov $)
- * @version $Revision: 1.20 $ $Date: 2007/03/01 22:37:49 $
- */
- private static class DataTemplateContext extends TemplateContext {
+ Object[] values = ((Collection) suggestionBox.getValue()).toArray();
+ // Object hiddenFetchValue = suggestionBox.getHiddenFetchValue();
+ Collection data = new ArrayList();
+ for (int i = 0; i < values.length; i++) {
- private List columns;
+ String var = (String) suggestionBox.getAttributes().get("var");
+ context.getExternalContext().getRequestMap()
+ .put(var, values[i]);
+ if (suggestionBox.getHiddenFetchValue() != null) {
+ data.add(suggestionBox.getHiddenFetchValue());
+ } else {
+ data.add(suggestionBox.getFetchValue());
+ }
- private int first;
+ }
+ suggestionBox.setData(data);
+ // Replace rendered area ID from component to suggestion table
+ suggestionBox.setRowIndex(-1);
+ AjaxContext ajaxContext = AjaxContext.getCurrentInstance(context);
+ ajaxContext.removeRenderedArea(component.getClientId(context));
+ ajaxContext.addRenderedArea(getContentId(context, component));
+ ajaxContext.getResponseDataMap().put("_ajax:data",data);
+
+ }
+ }
- private int last;
+ /**
+ * Gets component.
+ *
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return component
+ */
+ private UIComponent getTarget(final UIComponent component) {
+ String target = ((UISuggestionBox) component).getFor();
+ if (null != target) {
+ target = RendererUtils.getInstance().correctForIdReference(target,
+ component);
+ // Use parent since UIData - naming container
+ UIComponent targetComponent = RendererUtils.getInstance()
+ .findComponentFor(component, target);
+ if (null != targetComponent) {
+ return targetComponent;
+ } else {
+ throw new FacesException("Component for target " + target
+ + " not found in SuggestionBox " + component.getId());
+ }
+ } else {
+ return component;
+ }
+ }
- private int rows;
+ /**
+ * Gets script.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return script
+ */
+ private String getScript(final FacesContext context,
+ final UIComponent component) {
+ Map attributes = component.getAttributes();
+ StringBuffer script = new StringBuffer(" new ");
+ // Build ajax function call
+ JSFunction submitSuggest = AjaxRendererUtils.buildAjaxFunction(
+ component, context, "RichFaces.Suggestion");
+ UIComponent targetComponent = getTarget(component);
+ if (targetComponent.equals(component)) {
+ submitSuggest.addParameter(targetComponent.getClientId(context)
+ + "_input");
+ } else {
+ submitSuggest.addParameter(targetComponent.getClientId(context));
+ }
+ submitSuggest.addParameter(component.getClientId(context));
+ submitSuggest.addParameter(component.getAttributes().get("onsubmit"));
+ Map options = AjaxRendererUtils.buildEventOptions(context, component);
+ options.put("popup", component.getClientId(context));
+ for (int i = 0; i < OPTIONS.length; i++) {
+ String option = OPTIONS[i];
+ Object value = attributes.get(option);
+ if (null != value) {
+ options.put(option, value);
+ }
+ }
+ // If ajax queue name not set, put clientId
+ String eventsQueue = (String) options.get("eventsQueue");
+ if (null == eventsQueue) {
+ options.put("eventsQueue", component.getClientId(context));
+ }
+ String onselect = (String) attributes.get("onselect");
+ if (null != onselect) {
+ JSFunctionDefinition function = new JSFunctionDefinition(
+ "suggestion");
+ function.addParameter("event");
+ function.addToBody(onselect);
- private int rowCount;
+ options.put("onselect", function);
- private int current;
+ }
+ if (component.getValueBinding("fetchValue") != null
+ || attributes.get("fetchValue") != null) {
+ options.put("select", attributes.get("selectValueClass"));
+ }
- private String[] rowClasses = new String[0];
+ submitSuggest.addParameter(options);
+ script.append(submitSuggest.toScript()).append(";\n");
+ return script.toString();
+ }
- private String entryClass;
+ /**
+ * Gets template.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param data
+ * @return {@link org.ajax4jsf.framework.renderer.compiler.TemplateContext}
+ */
+ private TemplateContext getTemplateContext(final FacesContext context,
+ final UIData data) {
+ data.setRowIndex(-1);
+ return new DataTemplateContext(this, context, data);
+ }
- /**
- * Constructor.
- *
- * @param renderer {@link org.ajax4jsf.framework.renderer.RendererBase}
- * @param facesContext {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- */
- public DataTemplateContext(final RendererBase renderer,
- final FacesContext facesContext,
- final UIComponent component) {
- super(renderer, facesContext, component);
- if (component.getFacet("head") != null) {
- this.putParameter("hasHead", Boolean.TRUE);
- }
- if (component.getFacet("head") != null) {
- this.putParameter("hasHead", Boolean.TRUE);
- }
- // Fill child columns components
- columns = new ArrayList(component.getChildCount());
- for (Iterator iter = component.getChildren().iterator(); iter
- .hasNext();) {
- UIComponent column = (UIComponent) iter.next();
- if (column instanceof UIColumn) {
- columns.add(column);
- if (column.getFacet("head") != null) {
- this.putParameter("hasHead", Boolean.TRUE);
- this.putParameter("hasColumnHead", Boolean.TRUE);
- }
- if (column.getFacet("footer") != null) {
- this.putParameter("hasFooter", Boolean.TRUE);
- this.putParameter("hasColumnFooter", Boolean.TRUE);
- }
- }
- }
- // fill rows counters
- UISuggestionBox box = (UISuggestionBox) component;
- this.first = box.getFirst();
- this.rows = box.getRows();
- this.rowCount = box.getRowCount();
- // return all records; CH-1330
- if (rows <= 0 || true) {
- rows = rowCount - first;
- }
- last = first + rows;
- if (last > rowCount) {
- last = rowCount;
- }
- current = first;
- // rows classes
- entryClass = box.getEntryClass();
- String rowClasses = box.getRowClasses();
- if (null != rowClasses && rowClasses.length() > 0) {
- this.rowClasses = rowClasses.split("\\s+");
- }
+ /**
+ * Special html templates context class with pre-defined properties for
+ * iterations over rows and columns.
+ *
+ * @author shura (latest modification by $Author: alexsmirnov $)
+ * @version $Revision: 1.20 $ $Date: 2007/03/01 22:37:49 $
+ */
+ private static class DataTemplateContext extends TemplateContext {
- }
+ private List columns;
- /**
- * Gets parameter.
- *
- * @param key parameter key
- * @return parameter
- */
- public Object getParameter(Object key) {
- if ("rows".equals(key)) {
- // Iterate over rows in datatable
- return new Iterator() {
+ private int first;
- public boolean hasNext() {
- if (current >= last) {
- return false;
- }
- UIData data = ((UIData) getComponent());
- data.setRowIndex(current);
- return data.isRowAvailable();
- }
+ private int last;
- public Object next() {
- // TODO reset rows and columns classes counters
- current++;
- return getComponent();
- }
+ private int rows;
- public void remove() {
- throw new UnsupportedOperationException(
- "remove row from UIData not supported");
- }
+ private int rowCount;
- };
- } else if ("rowClass".equals(key)) {
- // Build row class string from entryClass and row classes
- StringBuffer rowClass = new StringBuffer();
- if (null != entryClass) {
- rowClass.append(entryClass);
- if (rowClasses.length > 0) {
- rowClass.append(" ");
- }
- }
- if (rowClasses.length > 0) {
- int currentClass = (current - first - 1)
- % rowClasses.length;
- if (currentClass < 0) {
- currentClass = 0;
- }
- rowClass.append(rowClasses[currentClass]);
- }
- // for iterate over columns
- return rowClass.toString();
- } else if ("columns".equals(key)) {
- // for iterate over columns
- return columns;
- } else if ("columnsCount".equals(key)) {
- return new Integer(columns.size());
- } else {
- return super.getParameter(key);
- }
- }
- }
+ private int current;
- /**
- * Gets opacity style.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return style
- */
- public final String opacityStyle(final FacesContext context,
- final UIComponent component) {
- String opacity = (String)
component.getAttributes().get("shadowOpacity");
- String filterOpacity;
+ private String[] rowClasses = new String[0];
- if (null == opacity) {
- Skin skin = SkinFactory.getInstance().getSkin(context);
- opacity = (String) skin.getParameter(context, "shadowOpacity");
- }
- try {
- Double op = Double.valueOf(opacity);
- filterOpacity = Integer.toString(op.intValue() * 10);
- opacity = Double.toString(op.doubleValue() / 10);
- } catch (Exception e) {
- // illegal opacity
- return ";";
- }
- return "opacity:" + opacity
- + "; filter:alpha(opacity=" + filterOpacity + ");";
- }
+ private String entryClass;
- /**
- * Gets border style.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return style
- */
- public final String border(final FacesContext context,
- final UIComponent component) {
+ /**
+ * Constructor.
+ *
+ * @param renderer
+ * {@link org.ajax4jsf.framework.renderer.RendererBase}
+ * @param facesContext
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ */
+ public DataTemplateContext(final RendererBase renderer,
+ final FacesContext facesContext, final UIComponent component) {
+ super(renderer, facesContext, component);
+ if (component.getFacet("head") != null) {
+ this.putParameter("hasHead", Boolean.TRUE);
+ }
+ if (component.getFacet("head") != null) {
+ this.putParameter("hasHead", Boolean.TRUE);
+ }
+ // Fill child columns components
+ columns = new ArrayList(component.getChildCount());
+ for (Iterator iter = component.getChildren().iterator(); iter
+ .hasNext();) {
+ UIComponent column = (UIComponent) iter.next();
+ if (column instanceof UIColumn) {
+ columns.add(column);
+ if (column.getFacet("head") != null) {
+ this.putParameter("hasHead", Boolean.TRUE);
+ this.putParameter("hasColumnHead", Boolean.TRUE);
+ }
+ if (column.getFacet("footer") != null) {
+ this.putParameter("hasFooter", Boolean.TRUE);
+ this.putParameter("hasColumnFooter", Boolean.TRUE);
+ }
+ }
+ }
+ // fill rows counters
+ UISuggestionBox box = (UISuggestionBox) component;
+ this.first = box.getFirst();
+ this.rows = box.getRows();
+ this.rowCount = box.getRowCount();
+ // return all records; CH-1330
+ if (rows <= 0 || true) {
+ rows = rowCount - first;
+ }
+ last = first + rows;
+ if (last > rowCount) {
+ last = rowCount;
+ }
+ current = first;
+ // rows classes
+ entryClass = box.getEntryClass();
+ String rowClasses = box.getRowClasses();
+ if (null != rowClasses && rowClasses.length() > 0) {
+ this.rowClasses = rowClasses.split("\\s+");
+ }
- String border = (String) component.getAttributes().get("border");
+ }
- String frame = (String) component.getAttributes().get("frame");
- if (null == frame) {
- frame = "box";
- }
- StringBuffer stringBuffer = new StringBuffer();
+ /**
+ * Gets parameter.
+ *
+ * @param key
+ * parameter key
+ * @return parameter
+ */
+ public Object getParameter(Object key) {
+ if ("rows".equals(key)) {
+ // Iterate over rows in datatable
+ return new Iterator() {
- if (null != border && Pattern.matches("\\d*", border)) {
- border += "px";
- }
+ public boolean hasNext() {
+ if (current >= last) {
+ return false;
+ }
+ UIData data = ((UIData) getComponent());
+ data.setRowIndex(current);
+ return data.isRowAvailable();
+ }
- boolean top = false, right = false, bottom = false, left = false;
- if (frame.equalsIgnoreCase("above")) {
- top = true;
- // else if (frame.equalsIgnoreCase("border") |
- // frame.equalsIgnoreCase("box")) top=right=bottom=left=true;
- } else if (frame.equalsIgnoreCase("below")) {
- bottom = true;
- } else if (frame.equalsIgnoreCase("hsides")) {
- top = true;
- bottom = true;
- } else if (frame.equalsIgnoreCase("lhs")) {
- left = true;
- } else if (frame.equalsIgnoreCase("rhs")) {
- right = true;
- } else if (frame.equalsIgnoreCase("vsides")) {
- right = true;
- left = true;
- } else {
- top = true;
- right = true;
- bottom = true;
- left = true;
- }
- stringBuffer.append("; border-width:");
- if (top) {
- stringBuffer.append(" ").append(border).append(" ");
- } else {
- stringBuffer.append(" 0px ");
- }
- if (right) {
- stringBuffer.append(" ").append(border).append(" ");
- } else {
- stringBuffer.append(" 0px ");
- }
- if (bottom) {
- stringBuffer.append(" ").append(border).append(" ");
- } else {
- stringBuffer.append(" 0px ");
- }
- if (left) {
- stringBuffer.append(" ").append(border).append(" ");
- } else {
- stringBuffer.append(" 0px ");
- }
- stringBuffer.append(";");
- return stringBuffer.toString();
- }
+ public Object next() {
+ // TODO reset rows and columns classes counters
+ current++;
+ return getComponent();
+ }
- /**
- * Gets background-color style.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return background-color style
- */
- public final String bgcolor(final FacesContext context,
- final UIComponent component) {
- String bgcolor = (String) component.getAttributes().get("bgcolor");
- if (bgcolor != null) {
- return "background-color: " + bgcolor + ";";
- }
- return ";";
- }
+ public void remove() {
+ throw new UnsupportedOperationException(
+ "remove row from UIData not supported");
+ }
- /**
- * Gets cellpadding style.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return cellpadding style
- */
- public final String cellPadding(final FacesContext context,
- final UIComponent component) {
- UISuggestionBox box = (UISuggestionBox) component;
- String cp = box.getCellpadding();
- if (cp != null) {
- return "padding: " + getUtils().encodePctOrPx(cp) + ";";
- }
- return ";";
- }
+ };
+ } else if ("rowClass".equals(key)) {
+ // Build row class string from entryClass and row classes
+ StringBuffer rowClass = new StringBuffer();
+ if (null != entryClass) {
+ rowClass.append(entryClass);
+ if (rowClasses.length > 0) {
+ rowClass.append(" ");
+ }
+ }
+ if (rowClasses.length > 0) {
+ int currentClass = (current - first - 1)
+ % rowClasses.length;
+ if (currentClass < 0) {
+ currentClass = 0;
+ }
+ rowClass.append(rowClasses[currentClass]);
+ }
+ // for iterate over columns
+ return rowClass.toString();
+ } else if ("columns".equals(key)) {
+ // for iterate over columns
+ return columns;
+ } else if ("columnsCount".equals(key)) {
+ return new Integer(columns.size());
+ } else {
+ return super.getParameter(key);
+ }
+ }
+ }
- /**
- * Gets border size
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return border size if set, 0 if none
- */
- public final String getBorder(final FacesContext context,
- final UIComponent component) {
+ /**
+ * Gets opacity style.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return style
+ */
+ public final String opacityStyle(final FacesContext context,
+ final UIComponent component) {
+ String opacity = (String) component.getAttributes()
+ .get("shadowOpacity");
+ String filterOpacity;
- String border = (String) component.getAttributes().get("border");
- if (border == null || border.length() == 0) {
- return "0";
- }
-
- return border;
- }
+ if (null == opacity) {
+ Skin skin = SkinFactory.getInstance().getSkin(context);
+ opacity = (String) skin.getParameter(context, "shadowOpacity");
+ }
+ try {
+ Double op = Double.valueOf(opacity);
+ filterOpacity = Integer.toString(op.intValue() * 10);
+ opacity = Double.toString(op.doubleValue() / 10);
+ } catch (Exception e) {
+ // illegal opacity
+ return ";";
+ }
+ return "opacity:" + opacity + "; filter:alpha(opacity=" +
filterOpacity
+ + ");";
+ }
-
- /**
- * Gets context identifier.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return context identifier
- */
- public final String getContentId(final FacesContext context,
- final UIComponent component) {
- return component.getClientId(context)
- + NamingContainer.SEPARATOR_CHAR + "suggest";
- }
+ /**
+ * Gets border style.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return style
+ */
+ public final String border(final FacesContext context,
+ final UIComponent component) {
- /**
- * Gets overflow sizes.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return overflow style
- */
- public final String overflowSize(final FacesContext context,
- final UIComponent component) {
- StringBuffer style = new StringBuffer();
+ String border = (String) component.getAttributes().get("border");
- style.append(getSizeForStyle(component, "width", null, true));
- style.append(getSizeForStyle(component, "height", null, true));
+ String frame = (String) component.getAttributes().get("frame");
+ if (null == frame) {
+ frame = "box";
+ }
+ StringBuffer stringBuffer = new StringBuffer();
- return style.toString();
- }
+ if (null != border && Pattern.matches("\\d*", border)) {
+ border += "px";
+ }
- /**
- * Gets shadow style.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return shadow style
- */
- public final String shadowDepth(final FacesContext context,
- final UIComponent component) {
- String shadow = (String) component.getAttributes().get("shadowDepth");
- if (shadow == null) {
- shadow = Integer.toString(SHADOW_DEPTH);
- }
+ boolean top = false, right = false, bottom = false, left = false;
+ if (frame.equalsIgnoreCase("above")) {
+ top = true;
+ // else if (frame.equalsIgnoreCase("border") |
+ // frame.equalsIgnoreCase("box")) top=right=bottom=left=true;
+ } else if (frame.equalsIgnoreCase("below")) {
+ bottom = true;
+ } else if (frame.equalsIgnoreCase("hsides")) {
+ top = true;
+ bottom = true;
+ } else if (frame.equalsIgnoreCase("lhs")) {
+ left = true;
+ } else if (frame.equalsIgnoreCase("rhs")) {
+ right = true;
+ } else if (frame.equalsIgnoreCase("vsides")) {
+ right = true;
+ left = true;
+ } else {
+ top = true;
+ right = true;
+ bottom = true;
+ left = true;
+ }
+ stringBuffer.append("; border-width:");
+ if (top) {
+ stringBuffer.append(" ").append(border).append(" ");
+ } else {
+ stringBuffer.append(" 0px ");
+ }
+ if (right) {
+ stringBuffer.append(" ").append(border).append(" ");
+ } else {
+ stringBuffer.append(" 0px ");
+ }
+ if (bottom) {
+ stringBuffer.append(" ").append(border).append(" ");
+ } else {
+ stringBuffer.append(" 0px ");
+ }
+ if (left) {
+ stringBuffer.append(" ").append(border).append(" ");
+ } else {
+ stringBuffer.append(" 0px ");
+ }
+ stringBuffer.append(";");
+ return stringBuffer.toString();
+ }
- return "top: " + shadow + "px; left: " + shadow +"px;
";
- }
+ /**
+ * Gets background-color style.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return background-color style
+ */
+ public final String bgcolor(final FacesContext context,
+ final UIComponent component) {
+ String bgcolor = (String) component.getAttributes().get("bgcolor");
+ if (bgcolor != null) {
+ return "background-color: " + bgcolor + ";";
+ }
+ return ";";
+ }
- /**
- * Gets additional scripts.
- *
- * @return array of resources
- * {@link org.ajax4jsf.framework.resource.InternetResource}
- */
- protected final InternetResource[] getAdditionalScripts() {
- return additionalScripts;
- }
+ /**
+ * Gets cellpadding style.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return cellpadding style
+ */
+ public final String cellPadding(final FacesContext context,
+ final UIComponent component) {
+ UISuggestionBox box = (UISuggestionBox) component;
+ String cp = box.getCellpadding();
+ if (cp != null) {
+ return "padding: " + getUtils().encodePctOrPx(cp) + ";";
+ }
+ return ";";
+ }
- /**
- * Gets styles.
- *
- * @return array of styles
- * {@link org.ajax4jsf.framework.resource.InternetResource}
- */
- protected final InternetResource[] getStyles() {
- return styles;
- }
+ /**
+ * Gets border size
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return border size if set, 0 if none
+ */
+ public final String getBorder(final FacesContext context,
+ final UIComponent component) {
- /**
- * Gets style for width & height.
- * @param component {@link javax.faces.component.UIComponent}
- * @param attr attribute
- * @param def default value
- * @param isShadow TRUE if shadow exists
- * @return style
- */
- private String getSizeForStyle(final UIComponent component,
- final String attr,
- final String def,
- final boolean isShadow) {
- Map attributes = component.getAttributes();
- StringBuffer style = new StringBuffer();
+ String border = (String) component.getAttributes().get("border");
+ if (border == null || border.length() == 0) {
+ return "0";
+ }
- String attribute = (String) attributes.get(attr);
- if (attribute == null && def != null) {
- attribute = def;
- }
+ return border;
+ }
- if (attribute != null && (!attribute.equals(""))) {
- if (isShadow) {
- attribute = String.valueOf(Integer.parseInt(attribute)
- - SHADOW_DEPTH);
- }
+ /**
+ * Gets context identifier.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return context identifier
+ */
+ public final String getContentId(final FacesContext context,
+ final UIComponent component) {
+ return component.getClientId(context) + NamingContainer.SEPARATOR_CHAR
+ + "suggest";
+ }
- style.append(attr).append(":").append(attribute);
- if (Pattern.matches("\\d*", attribute)) {
- style.append("px");
- }
- style.append(";");
- }
+ /**
+ * Gets overflow sizes.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return overflow style
+ */
+ public final String overflowSize(final FacesContext context,
+ final UIComponent component) {
+ StringBuffer style = new StringBuffer();
- return style.toString();
- }
-
- public void insertNothingLabel(final FacesContext context,
- final UIComponent component) throws IOException {
- ResponseWriter writer = context.getResponseWriter();
- UISuggestionBox suggestionBox = (UISuggestionBox)component;
- final String startHtml =
- "<tr id=\"" + suggestionBox.getClientId(context) +
"NothingLabel\" class=\"dr-sb-int rich-sb-int " +
suggestionBox.getRowClasses() +
- "\" style=\"display: none;\">" +
- "<td nowrap=\"nowrap\" class=\"dr-sb-cell-padding
rich-sb-cell-padding\" style=\"" + this.cellPadding(context, component) +
"\">";
- final String endHtml = "</td></tr>";
-
- UIComponent nothingLabelFacet = component.getFacet("nothingLabel");
- if(null != nothingLabelFacet && nothingLabelFacet.isRendered()) {
- writer.write(startHtml);
- renderChild(context, nothingLabelFacet);
- writer.write(endHtml);
- }
- else if (null != suggestionBox.getNothingLabel() &&
- !"".equals(suggestionBox.getNothingLabel())) {
- writer.write(startHtml);
- writer.write(suggestionBox.getNothingLabel());
- writer.write(endHtml);
- }
-
- }
-
- /**
- * Gets 'class' attribute for suggestion entry.
- *
- * @param context {@link javax.faces.context.FacesContext}
- * @param component {@link javax.faces.component.UIComponent}
- * @return 'class' attribute for 'tr' element of suggestion entry.
- */
- public final String getEntryClass(final FacesContext context,
- final UIComponent component) {
- String entryClass = (String) component.getAttributes().get("entryClass");
- if (null == entryClass)
- entryClass = "";
- String rowClass = (String) component.getAttributes().get("rowClasses");
- if (null == rowClass)
- rowClass = "";
-
- return "dr-sb-int rich-sb-int " + entryClass + " " +
rowClass;
- }
+ style.append(getSizeForStyle(component, "width", null, true));
+ style.append(getSizeForStyle(component, "height", null, true));
+
+ return style.toString();
+ }
+
+ /**
+ * Gets shadow style.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return shadow style
+ */
+ public final String shadowDepth(final FacesContext context,
+ final UIComponent component) {
+ String shadow = (String) component.getAttributes().get("shadowDepth");
+ if (shadow == null) {
+ shadow = Integer.toString(SHADOW_DEPTH);
+ }
+
+ return "top: " + shadow + "px; left: " + shadow + "px;
";
+ }
+
+ /**
+ * Gets additional scripts.
+ *
+ * @return array of resources
+ * {@link org.ajax4jsf.framework.resource.InternetResource}
+ */
+ protected final InternetResource[] getAdditionalScripts() {
+ return additionalScripts;
+ }
+
+ /**
+ * Gets styles.
+ *
+ * @return array of styles
+ * {@link org.ajax4jsf.framework.resource.InternetResource}
+ */
+ protected final InternetResource[] getStyles() {
+ return styles;
+ }
+
+ /**
+ * Gets style for width & height.
+ *
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @param attr
+ * attribute
+ * @param def
+ * default value
+ * @param isShadow
+ * TRUE if shadow exists
+ * @return style
+ */
+ private String getSizeForStyle(final UIComponent component,
+ final String attr, final String def, final boolean isShadow) {
+ Map attributes = component.getAttributes();
+ StringBuffer style = new StringBuffer();
+
+ String attribute = (String) attributes.get(attr);
+ if (attribute == null && def != null) {
+ attribute = def;
+ }
+
+ if (attribute != null && (!attribute.equals(""))) {
+ if (isShadow) {
+ attribute = String.valueOf(Integer.parseInt(attribute)
+ - SHADOW_DEPTH);
+ }
+
+ style.append(attr).append(":").append(attribute);
+ if (Pattern.matches("\\d*", attribute)) {
+ style.append("px");
+ }
+ style.append(";");
+ }
+
+ return style.toString();
+ }
+
+ public void insertNothingLabel(final FacesContext context,
+ final UIComponent component) throws IOException {
+ ResponseWriter writer = context.getResponseWriter();
+ UISuggestionBox suggestionBox = (UISuggestionBox) component;
+ final String startHtml = "<tr id=\""
+ + suggestionBox.getClientId(context)
+ + "NothingLabel\" class=\"dr-sb-int rich-sb-int "
+ + suggestionBox.getRowClasses()
+ + "\" style=\"display: none;\">"
+ + "<td nowrap=\"nowrap\" class=\"dr-sb-cell-padding
rich-sb-cell-padding\" style=\""
+ + this.cellPadding(context, component) + "\">";
+ final String endHtml = "</td></tr>";
+
+ UIComponent nothingLabelFacet = component.getFacet("nothingLabel");
+ if (null != nothingLabelFacet && nothingLabelFacet.isRendered()) {
+ writer.write(startHtml);
+ renderChild(context, nothingLabelFacet);
+ writer.write(endHtml);
+ } else if (null != suggestionBox.getNothingLabel()
+ && !"".equals(suggestionBox.getNothingLabel())) {
+ writer.write(startHtml);
+ writer.write(suggestionBox.getNothingLabel());
+ writer.write(endHtml);
+ }
+
+ }
+
+ /**
+ * Gets 'class' attribute for suggestion entry.
+ *
+ * @param context
+ * {@link javax.faces.context.FacesContext}
+ * @param component
+ * {@link javax.faces.component.UIComponent}
+ * @return 'class' attribute for 'tr' element of suggestion entry.
+ */
+ public final String getEntryClass(final FacesContext context,
+ final UIComponent component) {
+ String entryClass = (String) component.getAttributes()
+ .get("entryClass");
+ if (null == entryClass)
+ entryClass = "";
+ String rowClass = (String) component.getAttributes().get("rowClasses");
+ if (null == rowClass)
+ rowClass = "";
+
+ return "dr-sb-int rich-sb-int " + entryClass + " " + rowClass;
+ }
}