2012-08-31 3 views
7

Esto es solo un por qué algo extraño se está cuestionando.Etiqueta de área de texto Struts2 UI que agrega el atributo "clase" se completa con el valor "class java.util.HashMap"

Cometí un error y se suponía que debía usar "cssClass" pero escribí "clase" en su lugar. Sin embargo, "clase" no se define como una propiedad de la etiqueta textarea, así que esperaba que el comportamiento fuera el mismo que el valor cssClass (una propiedad no definida se debería representar tal como está, y se procesa la propiedad pero tiene un valor extraño y ese valor no parece ser modificable. Cualquier valor que alimente se ignora y se predetermina a la clase que respalda la etiqueta).

Por ejemplo, si defino un valor "turkey" esperaría que un valor de turquía se represente en html y es como podemos ver en el siguiente ejemplo.

Esto es lo que he usado en la JSP:

<s:textarea turkey="" class="" name="qualLine.description" value="%{description}"/> 

Esto es lo que se rindió:

<textarea name="qualLine.description" cols="" rows="" id="cows" class="class java.util.HashMap" turkey="">test</textarea> 

Mi pregunta no es lo que debería hacer, porque debería haber usado cssClass en lugar de clase, mi pregunta es: ¿Se espera y por qué?

+0

es lo que ocurre en todas partes en su aplicación o simplemente en esta página en particular, el problema parece un poco extraño –

+1

puedo comprobar esto y sucede con '' , '' , '' también ... – Pigueiras

+0

@Pigueiras: Quiere decir que muestra la clase como 'java.util.HashMap' –

Respuesta

0

Esto sucede porque cada objeto de Java tiene un método getClass(), que devuelve la clase de tiempo de ejecución de un objeto, en su caso java.util.HashMap. De esta forma, aunque class no está definido para la etiqueta textearea, se define para la clase TextareaTag, que es la clase que implementa el comportamiento textarea. Esto sucederá con cada etiqueta en su jsps, ya que todas ellas se implementan con una clase de Java al final.

Es por eso que (supongo) que el equipo de Struts usó cssClass como propiedad de usar class.

+0

Comprobaré esto más tarde, gracias. – Quaternion

+0

Aceptaré una respuesta que proporcione la implementación del comportamiento, lo que apuntaba a (Etiqueta) era una interfaz. – Quaternion

+0

Tienes razón, Tag es una interfaz (mi mal). He editado la respuesta con la implementación de textarea, que por supuesto implementa la interfaz 'Tag'. – admenva

2

¿Quizás está relacionado con el Modelo de plantilla Freemarker que se está utilizando?

En el dynamic-attributes.ftl, que se incluye desde el textarea.ftl para resolver los atributos dinámicos, el valor del atributo se evalúa primero contra el ValueStack usando una instancia StrutsUtil.translateVariables, que sólo utiliza una llamada estática a la TestParseUtil.translateVariables. Pero cuando eso no se evalúa a nada (nulo o nulo), luego vuelve al nombre del atributo - clase.

Este valor, "clase", se evalúa como una expresión de Freemarker - ${class} - en dynamic-attributes.ftl.

El StrutsUtil se coloca en el modelo de plantilla de Freemarker del FreemarkerManager que llama al para recuperar un mapa de objetos Struts2 para colocar en el modelo de plantilla. Este mapa que se coloca en el TemplateModel es un HashMap (¿quizás el mapa culpable?).

Por lo tanto, obviamente esta no es una respuesta completa, por lo que no espero que se acepte la "respuesta", pero fue demasiado para colocarla en un comentario y puede ayudar arrojar algo de luz. Si tengo tiempo más tarde en la semana, puedo desplegar la fuente de Struts2 y jugar con ella para encontrar la respuesta real. ¡Pero más probable, no me tomaré el tiempo!

Sin dudas, una pregunta interesante.

+0

muchas gracias, rastrearé esto un poco más tarde. – Quaternion

0

uso

CssClass = "input-sm"

en lugar de

class = "input-sm"

cuando se utiliza la entrada puntales como

<s:textfield cssClass=input-sm id="a" key="" name="" placeholder="Required"/> 
+0

Creo que si vuelves a leer la pregunta, verás que en la pregunta verás que estoy interesado en el efecto del uso del atributo "clase" y que soy consciente del uso correcto de "cssClass" – Quaternion

Cuestiones relacionadas