[opencms-dev] Multiple values to a single Property?
dinshaw gobhai
gobhai at gmail.com
Tue Oct 10 20:12:41 CEST 2006
Hello there,
Thanks but I think you did have it right.
I am trying to set the value (add property) to the value of the multi
widget.
I do the same thing as you but it is passted below.
MY problem is that a JAVA developer here before me made this custom class
and I just changed the sql to return my categories.
I believe that for the multi values i cannot use an 'extention' of the
SelectWidget but rather should be usiing the ComboBox as you are. But not
being a JAVA guy and not having a day or two to spend figuring it out i was
trying to get it to workwith the selectWidget.
I changed the output to multiple="true" but that did not do the trick.
Here is what i am using: wuold you mind showing me the ComboBox code you are
using?
package com.bhvr.opencms.widgets;
import com.bhvr.db.DBUtil;
import org.opencms.file.CmsObject;
import org.opencms.widgets.A_CmsSelectWidget;
import org.opencms.widgets.CmsSelectWidget;
import org.opencms.widgets.CmsSelectWidgetOption;
import org.opencms.widgets.I_CmsWidget;
import org.opencms.widgets.I_CmsWidgetDialog;
import org.opencms.widgets.I_CmsWidgetParameter;
import java.util.Iterator;
import java.util.List;
/**
* Provides a widget for a standard HTML form select box.<p>
*
* Please see the documentation of <code>{@link
org.opencms.widgets.CmsSelectWidgetOption}</code> for a description
* about the configuration String syntax for the select options.<p>
*
* The select widget does use the following select options:<ul>
* <li><code>{@link
org.opencms.widgets.CmsSelectWidgetOption#getValue()}</code>
for the <code>value</code> of the HTML select box
* <li><code>{@link
org.opencms.widgets.CmsSelectWidgetOption#isDefault()}</code>
for pre-selecting a specific value
* <li><code>{@link
org.opencms.widgets.CmsSelectWidgetOption#getOption()}</code>
for the <code>option</code> of the HTML select box
* </ul>
* <p>
*
* @author Andreas Zahner
*
* @version $Revision: 1.11 $
*
* @since 6.0.0
*/
public class CmsCategorySelectWidget extends A_CmsSelectWidget {
/**
* Creates a new select widget.<p>
*/
public CmsCategorySelectWidget() {
// empty constructor is required for class registration
super();
}
/**
* Creates a select widget with the select options specified in the
given configuration List.<p>
*
* The list elements must be of type <code>{@link
CmsSelectWidgetOption}</code>.<p>
*
* @param configuration the configuration (possible options) for the
select widget
*
* @see CmsSelectWidgetOption
*/
public CmsCategorySelectWidget(List configuration) {
super(configuration);
}
/**
* Creates a select widget with the specified select options.<p>
*
* @param configuration the configuration (possible options) for the
select box
*/
public CmsCategorySelectWidget(String configuration) {
super(configuration);
}
/**
* @see org.opencms.widgets.I_CmsWidget#getDialogWidget(
org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog,
org.opencms.widgets.I_CmsWidgetParameter)
*/
public String getDialogWidget(CmsObject cms, I_CmsWidgetDialog
widgetDialog, I_CmsWidgetParameter param) {
String id = param.getId();
StringBuffer result = new StringBuffer(16);
result.append("<td class=\"xmlTd\" style=\"height: 25px;\"><select
multiple=\"true\" class=\"xmlInput");
if (param.hasError()) {
result.append(" xmlInputError");
}
result.append("\" name=\"");
result.append(id);
result.append("\" id=\"");
result.append(id);
result.append("\">");
// get select box options from default value String
// List options = parseSelectOptions(cms, widgetDialog, param);
DBUtil dbUtil = new DBUtil();
javax.sql.rowset.CachedRowSet rs =
dbUtil.getCachedData("java:/comp/env/jdbc/lt",
"SELECT CONCAT( REPEAT('-', COUNT(parent.name) - 1), node.name) AS name,"
+" node.cat_id AS cat_id"
+" FROM categories AS node,"
+" categories AS parent"
+" WHERE node.lft BETWEEN parent.lft AND parent.rgt"
+" GROUP BY node.cat_id"
+" ORDER BY node.lft");
List<CmsSelectWidgetOption> options = new java.util.ArrayList
<CmsSelectWidgetOption>();
try {
while (rs.next()) {
options.add(new CmsSelectWidgetOption(rs.getString("name"),
false, rs.getString("name")));
}
} catch (Exception e) {
System.err.println(e.getMessage());
}
String selected = getSelectedValue(cms, param);
Iterator i = options.iterator();
while (i.hasNext()) {
CmsSelectWidgetOption option = (CmsSelectWidgetOption)i.next();
// create the option
result.append("<option value=\"");
result.append(option.getValue());
result.append("\"");
if ((selected != null) && selected.equals(option.getValue())) {
result.append(" selected=\"selected\"");
}
result.append(">");
result.append(option.getOption());
result.append("</option>");
}
result.append("</select>");
result.append("</td>");
return result.toString();
}
/**
* @see org.opencms.widgets.I_CmsWidget#newInstance()
*/
public I_CmsWidget newInstance() {
return new CmsCategorySelectWidget(getConfiguration());
}
}
On 10/7/06, Jonathan Woods <jonathan.woods at scintillance.com> wrote:
>
> Dinshaw -
>
> I'm sorry; I misunderstood your question, anyway. As far I can tell, you
> want the value of multiple elements to map on to a single property, whereas
> in my case I was merely setting an element's 'value' (and thereby a mapped
> property) using values derived from a multi-select widget.
>
> Are you restricted to using a PHP application layer? If you used Java
> executing in the OpenCms context, you'd have far more flexibility - e.g.
> Java could process the XML document instance whenever it wanted, maybe
> setting a property to help in later querying for category-matching
> resources. I take a different approach at www.colfes.com: I index XML
> docs in Lucene, and query the Lucene index at page rendering time (with some
> caching) to select resources matching multiple categories.
>
> By the way, is the code to your CmsCategorySelectWidget something you can
> share? I currently flatten a hierarchical value structure and represent it
> in a simple SelectorWidget - ugly!
>
> Jon
>
> ------------------------------
> *From:* opencms-dev-bounces at opencms.org [mailto:
> opencms-dev-bounces at opencms.org] *On Behalf Of *dinshaw gobhai
> *Sent:* 06 October 2006 17:56
> *To:* The OpenCms mailing list
> *Subject:* Re: [opencms-dev] Multiple values to a single Property?
>
> Hi Jon,
> Thanks very much. I tried your sugestion and still my values are
> overwritten.
> My relevent schema lines are:
>
> <xsd:element name="Category" type="OpenCmsString" />
> <layout element="Category" widget="CmsCategorySelectWidget" />
> <mapping element="Category" mapto="property:category" />
>
> If you have a second to see if there is anything dumb in here (like I
> shouldn't be using String) that would be great.
> The CmsCategorySelectWidget uses a MySQL nested set modle category table
> to return a tree stucture.
> Thanks again,
> -Dinshaw
>
>
> On 10/6/06, Jonathan Woods <jonathan.woods at scintillance.com> wrote:
> >
> > Dinshaw -
> >
> > I use a SelectorWidget to render a multiple-select list in a couple of
> > my XSDs, and I used to map the (multiple) value of this using an ordinary
> > <mapping> element. OpenCms populated the property with the values selected,
> > separating them with a comma (or was it a semicolon? can't recall).
> >
> > Jon
> >
> > ------------------------------
> > *From:* opencms-dev-bounces at opencms.org [mailto:
> > opencms-dev-bounces at opencms.org] *On Behalf Of *dinshaw gobhai
> > *Sent:* 05 October 2006 18:48
> > *To:* opencms-dev at opencms.org
> > *Subject:* [opencms-dev] Multiple values to a single Property?
> >
> > Hi there,
> > I am fairly new to OpenCMS and have found references to that fact that i
> > can map multiple values to a single property however I can not find a guide
> > as to how.
> > If anyone could point me to a reference that would be great.
> >
> > The problem is that I have a category select list for a content type
> > my_article.xsd that needs to occur multiple times so that it can appear on
> > different category pages simultaneously.
> >
> > The catch is that the system I am working on has built a php application
> > layer to get and parse the OpenCMS content and they sql query needs the
> > property value to target the articles that should be included.
> >
> > Currently only the first instance of the Category select list is mapped
> > to the category property.
> >
> > <mapping element="Category" mapto="property:category" />
> >
> > so what i was looking for (i think) was something like
> > <mapping element="Category" mapto="property:category" multiple="true" />
> >
> > But i have been unable to find it.
> >
> > Any help would be greatly appreciated.
> > Thanks,
> > -Dinshaw, NYC
> >
> >
> >
> > _______________________________________________
> > This mail is sent to you from the opencms-dev mailing list
> > To change your list options, or to unsubscribe from the list, please
> > visit
> > http://lists.opencms.org/mailman/listinfo/opencms-dev
> >
> >
>
>
> _______________________________________________
> This mail is sent to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, please visit
> http://lists.opencms.org/mailman/listinfo/opencms-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://webmail.opencms.org/pipermail/opencms-dev/attachments/20061010/b3069a41/attachment.htm>
More information about the opencms-dev
mailing list