He estado aprendiendo SSH recientemente, y no he entendido la diferencia entre $,%,%y#. He hecho algunos ejercicios pequeños y he entendido gradualmente un poco. Grabaré lo que he aprendido.
La siguiente entidad existe:
Persona de clase pública {private int id; nombre de cadena privada; public int getId () {return id; } Public Person (int id, name de cadena) {super (); this.id = id; Nombre = nombre; } Public Person () {super (); } public void setid (int id) {this.id = id; } public String getName () {nombre de retorno; } public void setName (name de cadena) {name = name; }} En la acción de Struts2, se escribe el siguiente código:
@Override public String Execute () lanza la excepción {// Persona de aplicación P = nueva persona (1, "Zhangsan"); ActionContext.getContext (). GetApplication (). Put ("Persona", P); // Persona de sesión P1 = nueva persona (3, "wangwu"); ActionContext.getContext (). GetSession (). Put ("Persona", P1); // solicitar persona p2 = nueva persona (2, "lisi"); ActionContext.getContext (). Put ("Persona", P2); // ServletContext Person P3 = nueva persona (5, "Xiaoming"); ActionContext.getContext (). GetContextMap (). Put ("Persona", P3); Persona p4 = nueva persona (3, "wangwu"); ActionContext.getContext (). GetValueStack (). Push (P4); devolver "éxito"; } Almacene un objeto de persona en la aplicación, sesión, solicitud, servletContext, ValueStack, respectivamente. Luego, en JSP, podemos obtenerlo de la siguiente manera:
Persona: <input type = "text" name = "name" value = "$ {persona}" /> <br /> id: <input type = "text" name = "name" value = "$ {persona.id}" /> <Br /> name: <input type = "text" name = "name" value = "$ {persona.name}" /> <r /> <hr> La información de la persona obtenida por el código anterior es Xiaoming, es decir, la información almacenada en ActionContext.getContext (). GetContextMap (). Al consultar el uso de $, se encuentra que hay una manera de obtener el objeto de $, es decir,
ActionContext.getContext (). GetContextMap ()> ActionContext.getContext ()> ActionContext.getContext (). GetSession ()> ActionContext.getContext (). GetApplication (). Para los objetos con el mismo nombre existen en diferentes ámbitos (ámbitos), el método de búsqueda de $ se llevará a cabo de acuerdo con los pasos anteriores. Si se encuentra, se emitirá. Si no se encuentra, continuará buscando en el nivel anterior. Cuando la parte superior no existe, saldrá nulo.
Entonces el uso de $ es: $ {scope.object.attribute}
El valor de atributo del alcance es la solicitud, la sesión, la aplicación. Cuando no esté escrito por defecto, buscará de acuerdo con el esquema anterior. Si lo encuentra, emitirá el valor de atributo relevante.
En la etiqueta Struts, guarde A:
<S: Propiedad Value = "#Application.person"/>
Se puede ver que el número # se usó en este momento. Personalmente, creo que el uso de # y $ es en realidad el mismo. Siempre que cargue el objeto que necesita emitir en un mapa (servletContext, solicitud, sesión y aplicación) en un rango diferente, al mostrarlo en la vista, usando <s: Property Value = "#Scope.Object.Attribute"> es exactamente lo mismo que $ comprensión. Pero cuando usas etiquetas de puntales, por ejemplo:
<s: textfield name = "persona.name"> </s: textfield>
Se puede entender completamente como
<input type = "text" name = "persom.name" id = "persona.name" value = "<s: propiedad valor ="#persona.name " />" />
Es decir, la etiqueta Struts ha sido encapsulado para nosotros en el texto HTML <s: Propiedad Value = "#Target.name"/>, que puede guardarme mucho código.
Del mismo modo, el uso de # es: <s: propiedad value = " # scope.object.attribute" />
Por supuesto, puede usar las etiquetas definidas por Struts2 para guardar la molestia de escribir demasiados códigos duplicados. De hecho, # tiene otros usos, como construir objetos como mapas, pero personalmente creo que la era de escribir demasiado código en la opinión ha pasado, y este uso no tiene sentido. Además, esta vez solo escribí el proceso de mostrarlo en la vista, por lo que no hablaré de eso en otro lugar.
Finalmente, hablemos sobre el uso del %. En pocas palabras, %{} es una expresión de cálculo de cadena. Por ejemplo, hay un cierto enlace en la vista, que generalmente tiene funciones básicas como CRUD. Para las funciones Agregar y actualizar, se puede completar en la misma página. La diferencia es que la dirección que presentamos es diferente. Por ejemplo, puede ser así: para el método ADD, la dirección es user_add.action, y para el método UDPate, la dirección es user_update.action, por lo que en la forma, % se puede usar para el juicio:
<s: form de acción = "usuario _%{id == 0? 'Agregar': 'update'}"> </form> Jaja, por lo que las dos páginas anteriores ahora se pueden resolver en una página.
Del mismo modo, el % se usa con más frecuencia con las etiquetas de juicio, como si y ifelse en puntales. Después de todo, ¿es una comparación? . . .
<s: if test = "%{false}"> <div> no se ejecutará </div> </s: if> <s: elseif test = "%{true}"> <div> se ejecutará </div> </s: elseif> <s: else> <div> no se ejecutará </div> </s: else> Finalmente, hablemos sobre el enfoque útil de este %, suponiendo que haya una lista que muestre todas las calificaciones de aprobación de los estudiantes (es decir, las calificaciones fallidas no se mostrarán anteriormente), si el % utilizado será muy simple. No, solo pon el código primero:
Public Class Stduent implementa java.io.serializable {private static final long SerialVersionUid = -691038814755396419l; ID privado int; nombre de cadena privada; PRIVADO INT SCORE; sujeto de cadena privada; public int getId () {return id; } public void setid (int id) {this.id = id; } public String getName () {nombre de retorno; } public void setName (nombre de cadena) {this.name = name; } public int getScore () {score de retorno; } public void setScore (int store) {this.score = stork; } public String getSubject () {return Sujem; } public void setSubject (string stem) {this.subject = saters; } / ** * Aquí juzgamos si el puntaje aprueba el examen * @param socre * @return * / public boolean ispast (int socre) {return getScore ()> 60; }} Entonces, ahora busque las calificaciones de los estudiantes en la base de datos y póngalos en la lista para el almacenamiento temporal. En la página JSP, podemos usar el siguiente código para controlar si pasa la salida del sistema de calificación:
<s: iterator value = "#aluser"> <!- Determine si pasar la línea, si pasa la línea, se emitirá, ¡de lo contrario lo renunciará! -> <s: if test = "#session.user.ispast (score)"> nombre: <s: textfield name = "name"> </s: textfield> score: <s: textfield name = "score"> </s: textfield>/stater: <s: textfield name = "stater"> </s: textfield> </s: if </s: iterator>
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!