|
Indice
| Temas Recientes
| Quién Está en Línea
| Lista de Usuarios
| Nuevo Usuario
| Búsqueda
| Ayuda
| ![]() |
![]() |
mvnForum » Listar todos los foros » Foro: General OpenCms 6 » Tema: DisplayWidget propio |
Estado del tema: Normal Total de mensajes en este tema: 3 |
[Añadir a Mis Favoritos] [Añadir un aviso a este tema] [Publicar nuevo tema] |
Autor |
|
![]() Member
|
Buenas, Estoy haciendo un DisplayWidget para mi, que muestre una cadena por defecto siempre (este es el primer paso, despues haré que muestre un texto dinámico, que no es problema). Bien, mi código es: import java.util.Set; import org.opencms.file.CmsObject; import org.opencms.i18n.CmsEncoder; import org.opencms.main.OpenCms; import org.opencms.util.CmsStringUtil; import org.opencms.widgets.A_CmsWidget; import org.opencms.widgets.CmsDisplayWidget; import org.opencms.widgets.I_CmsWidget; import org.opencms.widgets.I_CmsWidgetDialog; import org.opencms.widgets.I_CmsWidgetParameter; public class CmsDisplayWidgetPropio extends A_CmsWidget{ /** Key post fix, so you can display different help text if used a "normal" widget, and a display widget. */ private static final String DISABLED_POSTFIX = ".disabled"; /** * Creates a new input widget.<p> */ public CmsDisplayWidgetPropio() { // empty constructor is required for class registration super(); } /** * Creates a new input widget with the given configuration.<p> * * @param configuration the configuration to use */ public CmsDisplayWidgetPropio(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(); String miCadena="TEXTO DE EJEMPLO"; StringBuffer result = new StringBuffer(16); result.append("<td class=\"xmlTd\">"); result.append("<span class=\"xmlInput textInput\" style=\"border: 0px solid black;\">"); if (CmsStringUtil.isNotEmpty(getConfiguration())) { result.append(getConfiguration()); } else { result.append(miCadena); //result.append(param.getStringValue(cms)); } result.append("</span>"); result.append("<input type=\"hidden\""); result.append(" name=\""); result.append(id); result.append("\" id=\""); result.append(id); result.append("\" value=\""); result.append(CmsEncoder.escapeXml(miCadena)); //result.append(CmsEncoder.escapeXml(param.getStringValue(cms))); result.append("\">"); result.append("</td>"); return result.toString(); } /** * @see org.opencms.widgets.A_CmsWidget#getHelpBubble(org.opencms.file.CmsObject, org.opencms.widgets.I_CmsWidgetDialog, org.opencms.widgets.I_CmsWidgetParameter) */ public String getHelpBubble(CmsObject cms, I_CmsWidgetDialog widgetDialog, I_CmsWidgetParameter param) { StringBuffer result = new StringBuffer(128); String locKey = getDisabledHelpKey(param); String locValue = widgetDialog.getMessages().key(locKey, true); if (locValue == null) { // there was no help message found for this key, so return a spacer cell return widgetDialog.dialogHorizontalSpacer(16); } else { result.append("<td>"); result.append("<img name=\"img"); result.append(locKey); result.append("\" id=\"img"); result.append(locKey); result.append("\" src=\""); result.append(OpenCms.getLinkManager().substituteLink(cms, "/system/workplace/resources/commons/help.png")); result.append("\" alt=\"\" border=\"0\""); if (widgetDialog.useNewStyle()) { result.append(getJsHelpMouseHandler(widgetDialog, locKey, null)); } else { result.append(getJsHelpMouseHandler(widgetDialog, locKey, CmsEncoder.escape(locValue, cms.getRequestContext().getEncoding()))); } result.append("></td>"); return result.toString(); } } /** * @see org.opencms.widgets.A_CmsWidget#getHelpText(org.opencms.widgets.I_CmsWidgetDialog, org.opencms.widgets.I_CmsWidgetParameter) */ public String getHelpText(I_CmsWidgetDialog widgetDialog, I_CmsWidgetParameter param) { String helpId = getDisabledHelpKey(param); Set helpIdsShown = widgetDialog.getHelpMessageIds(); if (helpIdsShown.contains(helpId)) { // help hey has already been included in output return ""; } helpIdsShown.add(helpId); // calculate the key String locValue = widgetDialog.getMessages().key(helpId, true); if (locValue == null) { // there was no help message found for this key, so return an empty string return ""; } else { if (widgetDialog.useNewStyle()) { StringBuffer result = new StringBuffer(128); result.append("<div class=\"help\" id=\"help"); result.append(helpId); result.append("\""); result.append(getJsHelpMouseHandler(widgetDialog, helpId, helpId)); result.append(">"); result.append(locValue); result.append("</div>\n"); return result.toString(); } else { return ""; } } } /** * @see org.opencms.widgets.I_CmsWidget#newInstance() */ public I_CmsWidget newInstance() { return new CmsDisplayWidget(getConfiguration()); } /** * Returns the localized help key for the provided widget parameter.<p> * * @param param the widget parameter to return the localized help key for * * @return the localized help key for the provided widget parameter */ private String getDisabledHelpKey(I_CmsWidgetParameter param) { StringBuffer result = new StringBuffer(64); result.append(LABEL_PREFIX); result.append(param.getKey()); result.append(HELP_POSTFIX); result.append(DISABLED_POSTFIX); return result.toString(); } } EL PROBLEMA: Pues que no me muestra nada, al crear un xsd con mi widget, por ejemplo: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xsd:include schemaLocation="opencms://opencms-xmlcontent.xsd"/> <xsd:element name="Widgets" type="OpenCmsWidgets"/> <xsd:complexType name="OpenCmsWidgets"> <xsd:sequence> <xsd:element name="Widget" type="OpenCmsWidget" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="OpenCmsWidget"> <xsd:sequence> <xsd:element name="Nombre" type="OpenCmsString"/> <xsd:element name="Valor" type="OpenCmsString"/> </xsd:sequence> <xsd:attribute name="language" type="OpenCmsLocale" use="required"/> </xsd:complexType> <xsd:annotation> <xsd:appinfo> <defaults> <default element="Nombre" value="Nombre sin elegir" /> </defaults> <mappings/> <layouts> <layout element="Valor" widget="com.widgets.displayPropio.CmsDisplayWidgetPropio" /> </layouts> </xsd:appinfo> </xsd:annotation> </xsd:schema> Es como si escuchara llover, no muestra lo que le he dicho en la clase, además, incluso si se lo comento todo y solo le dejo que devuelva una cadena vacía, me sigue generando la estructura "<td class=\xmlTd\><span class=\xmlInput textInput\ ..." OJO: Además de ésto, he creado una nueva línea en opencms-vfs.xml : <widget class="com.widgets.displayPropio.CmsDisplayWidgetPropio" alias="DisplayPropio" /> He seguido el esquema del select dinámico que teneis en la sección de código, es decir, he modificado solo el método getDialogWidget. De hecho, también he hecho un select widget propio y funciona de fábula... ¿Sabeis porque puede ser que mi DisplayWidget pase de mi? :D Gracias |
||
|
![]() Member
|
Hola, por un lado tienes
y por otro tienes
y deberias tener public I_CmsWidget newInstance() { return new CmsDisplayWidgetPropio (getConfiguration()); } que es como lo has llamado. A partir de ahi mira si te funciona. Un saludo. |
|||||
|
![]() Member
|
Premio! Muchas gracias... no me había fijado en este último método, cuando llevas 5 horas seguidas empiezas a ver chiribitas :D |
||
|
[Versión imprimible] [Publicar nuevo tema] |