Cuál es la mejor manera de lograr mensajes flash Rails-como como "Actualización exitosa" http://api.rubyonrails.org/classes/ActionController/Flash.html) en el mundo de Java? Estoy usando Spring MVC.Rieles mensajes flash en Java
Respuesta
recomendaría implementar esto como una tabla hash en toda la sesión, con claves de cadena mapeo de objetos FlashItem personalizado. El FlashItem simplemente contendrá el objeto o la cadena que se está almacenando más un valor booleano, posiblemente llamado isNew, que debe tener el valor true cuando se inserta un nuevo elemento en la tabla hash.
En cada carga de la página, a continuación, iterar el HashTable, establezca ningún = true artículos isNew a falsa, y elimine los elementos donde isNew ya es falsa. Eso debería darle un trabajo similar a la función de flash de Rails.
Si no ha invertido una gran cantidad de trabajo en su aplicación de primavera de Java, puede consultar los carriles de ejecución en jruby. La belleza de ejecutar jRuby on Rails es que puedes mezclar y combinar ruby gems y java libs.
Si ya ha puesto una buena cantidad de trabajo en su aplicación a continuación, esto es más que probable que no es una opción.
He hecho justamente eso en Spring MVC con una sesión de con alcance bean.
public class FlashImpl implements Flash, Serializable{
private static final long serialVersionUID = 1L;
private static final String ERROR = "error";
private static final String WARNING = "warning";
private static final String NOTICE = "notice";
private String message;
private String klass;
public void message(String klass, String message) {
this.klass = klass;
this.message = message;
}
public void notice(String message) {
this.message(NOTICE, message);
}
public void warning(String message) {
this.message(WARNING, message);
}
public void error(String message) {
this.message(ERROR, message);
}
public boolean isEmptyMessage() {
return message == null;
}
public void clear() {
this.message = null;
this.klass = null;
}
public String getMessage() {
String msg = message;
this.clear();
return msg;
}
public void setMessage(String message) {
this.message = message;
}
public String getKlass() {
return klass;
}
public void setKlass(String klass) {
this.klass = klass;
}}
El truco está en consumir el mensaje una vez que ha sido leído por primera vez. De esta manera puede sobrevivir a una redirección después de la publicación.
Estoy asumiendo que no habrá un solo tipo de mensaje para la petición !. Si no quieres esto, puedes crear un hashmap como ya se sugirió.
Inyerto este bean en mis controladores (en realidad lo inyecto en un controlador base heredado por todos los demás).
En su JSP se tienen que añadir algo de código como este:
<c:if test="${!flash.emptyMessage}" >
<div class="${flash.klass}">${fn:escapeXml(flash.message)}</div>
</c:if>
he utilizado ejemplo Manolo Santos con con Spring MVC de la siguiente manera:
Anotar la clase de Flash con @Component, y agregue una variable booleana para indicar si el mensaje debería vivir para una solicitud más.
@Component public class Flash { private static final String INFO = "info"; private static final String SUCCESS = "success"; private static final String ERROR = "error"; private static final String WARNING = "warning"; private static final String NOTICE = "notice"; private final Map msgs = new HashMap(); private boolean isKept; // keep msg for one more request (when the controller method redirects to another) private void message(String severity, String message) { msgs.put(message, severity); } public void info(String message) { this.message(INFO, message); } public void success(String message) { this.message(SUCCESS, message); } public void notice(String message) { this.message(NOTICE, message); } public void warning(String message) { this.message(WARNING, message); } public void error(String message) { this.message(ERROR, message); } public boolean isEmptyMessage() { return msgs.isEmpty(); } public void clear() { msgs.clear(); isKept = false; } public Map getMessage() { return msgs; } public boolean isKept() { return isKept; } public void keep() { isKept = true; } public void unKeep() { isKept = false; } }
Utilice un interceptor para agregar el mensaje flash al objeto modelo.
public class FlashMessageInterceptor extends HandlerInterceptorAdapter { @Resource Flash flash; @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (!flash.isKept()) { modelAndView.addObject("flash", flash); } } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { if (flash.isKept()) { flash.unKeep(); } else { flash.clear(); } } }
En su controlador, si tiene un método que redirecciona a otro método, puede simplemente decir; flush.keep(), para que se muestre el mensaje flash.
@Controller public class ComputerCampLove { @Resource private Flash flash; @RequestMapping(method = RequestMethod.GET) public String takeMeToAnotherPlace(Model model) { flash.info("Fa-fa-fa!"); flash.keep(); return "redirect:somewhere"; } }
Esto ha sido añadido a Spring MVC 3.1.RC1:
3.1.15 Flash Attributes and RedirectAttributes
flash atributos ahora se puede almacenar en un FlashMap y se guarda en la sesión HTTP para sobrevivir a una redirección. Para obtener una descripción general de la compatibilidad general de los atributos de flash en Spring MVC, consulte Section 16.6, “Using flash attributes”.
En los controladores anotados, un método @RequestMapping puede agregar atributos flash al declarar un argumento de método de tipo RedirectAttributes. Este argumento de método ahora también se puede usar para obtener un control preciso sobre los atributos utilizados en un escenario de redirección. Vea Section 16.3.3.10, “Specifying redirect and flash attributes” para más detalles.
(JIRA: SPR-6464)
- 1. BackboneJS Mensajes Flash
- 2. jquery: mensajes Flash
- 3. Diseñar mensajes flash no aparece
- 4. Raíles Deshabilitar diseñar mensajes flash
- 5. Uso de HTML en mensajes flash Rails
- 6. mensajes flash en Parciales (carriles 3)
- 7. rieles roscados mensajes privados
- 8. Rieles, perdiendo flash después de redirect_to
- 9. Eliminación de mensajes JSF del flash
- 10. ¿Dónde se almacenan los mensajes flash?
- 11. Método de mejores prácticas para mostrar mensajes flash
- 12. rieles de flash: aviso no trabajar
- 13. ¿Qué enfoque toma para incrustar enlaces en mensajes flash?
- 14. Interceptar mensajes flash entrantes en el móvil Android
- 15. Administrador activo: no aparecen los mensajes flash en la página
- 16. ¿Qué tipos de mensajes flash están disponibles en Rails?
- 17. backbone.js y manejo de mensajes de errores de rieles?
- 18. cómo cambiar el flash del dispositivo [: aviso] en los rieles
- 19. Enviando mensajes a un juego Flash con C# y AutoIt
- 20. Caché de página de raíles y mensajes flash
- 21. ruby on rails mensajes flash -: alerta: error: aviso y: ¿éxito?
- 22. Transmisión de mensajes de error a través de flash
- 23. rieles/mensajes de error MongoId en atributos anidados
- 24. rieles/Diseñar - Personalizar mensaje flash (devise.en.yml) con un link_to
- 25. rieles: impiden mensaje flash de mostrar dos veces
- 26. java: colorful system.out mensajes en la consola
- 27. rieles registro de mensajes: cache: invalida, pasar [Post/acción]
- 28. De renderizar 2D Java a Flash
- 29. Clases personalizadas y formato en mensajes Flash para valores predeterminados de Bootstrap en Twitter
- 30. ¿Existe un applet Java/Flash de carga por Java Javascriptable?
Desafortunadamente estoy muy comprometido con la primavera. – wachunga