Inicio de mvnForum Bienvenido Guest   | Iniciar sesión
  Búsqueda  
  Indice  | Temas Recientes  | Quién Está en Línea  | Lista de Usuarios  | Nuevo Usuario  | Búsqueda  | Ayuda  | RSS feeds


Ir a »
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
Tema Anterior Este tema ha sido visto 2450 veces y tiene 2 respuestas Tema Siguiente
Masculino enzo92
Member



Ingresó: 26-feb-2008
Mensajes: 58
Estado: Desconectados

DisplayWidget propio Responder a este mensaje
Responder citando

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
[25-mar-2008 11:09:05] Mostrar la Versión Imprimible        Send Private Message    Oculto a Invitados [Enlace] Reportar mensaje ofensivo: por favor inicie sesión primero  Ir al inicio 
Masculino CG_uhu
Member



Ingresó: 03-feb-2007
Mensajes: 82
Estado: Desconectados

Re: DisplayWidget propio Responder a este mensaje
Responder citando

Hola, por un lado tienes

 


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();

y por otro tienes
 


/**
* @see org.opencms.widgets.I_CmsWidget#newInstance()
*/
public I_CmsWidget newInstance() {

return new CmsDisplayWidget(getConfiguration());
}


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.
[25-mar-2008 14:39:41] Mostrar la Versión Imprimible        Send Private Message [Enlace] Reportar mensaje ofensivo: por favor inicie sesión primero  Ir al inicio 
Masculino enzo92
Member



Ingresó: 26-feb-2008
Mensajes: 58
Estado: Desconectados

Re: DisplayWidget propio Responder a este mensaje
Responder citando

Premio! Muchas gracias... no me había fijado en este último método, cuando llevas 5 horas seguidas empiezas a ver chiribitas :D
[25-mar-2008 15:08:11] Mostrar la Versión Imprimible        Send Private Message    Oculto a Invitados [Enlace] Reportar mensaje ofensivo: por favor inicie sesión primero  Ir al inicio 
[Versión imprimible] [Publicar nuevo tema]