Cách tiếp cận đã được chứng minh là sử dụng phạm vi flash đặc biệt cho các tin nhắn sẽ được giữ lại cho đến khi yêu cầu GET tiếp theo.
Tôi thích sử dụng một phiên scoped đối tượng flash:
public interface Flash {
void info(String message, Serializable... arguments);
void error(String message, Serializable... arguments);
Map<String, MessageSourceResolvable> getMessages();
void reset();
}
@Component("flash")
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public class FlashImpl implements Flash {
...
}
Một MVC chặn đặc biệt sẽ đọc các giá trị flash từ các đối tượng flash và đặt chúng trong phạm vi yêu cầu:
public class FlashInterceptor implements WebRequestInterceptor {
@Autowired
private Flash flash;
@Override
public void preHandle(WebRequest request) {
final Map<String, ?> messages = flash.getMessages();
request.setAttribute("flash", messages, RequestAttributes.SCOPE_REQUEST);
for (Map.Entry<String, ?> entry : messages.entrySet()) {
final String key = "flash" + entry.getKey();
request.setAttribute(key, entry.getValue(), RequestAttributes.SCOPE_REQUEST);
}
flash.reset();
}
...
}
Bây giờ trong bộ điều khiển, bạn có thể chỉ cần đặt các thông điệp trong "phạm vi flash":
@Conteroller
public class ... {
@Autowired
private Flash flash;
@RequestMapping(...)
public void doSomething(...) {
// do some stuff...
flash.info("your.message.key", arg0, arg1, ...);
}
}
Trong chế độ xem của bạn y ou lặp qua các tin nhắn flash:
<c:forEach var="entry" items="${flash}">
<div class="flash" id="flash-${entry.key}">
<spring:message message="${entry.value}" />
</div>
</c:forEach>
Tôi hy vọng điều này sẽ giúp bạn.
Nguồn
2010-12-06 10:52:52
cách giữ ** messageSource ** trong bộ điều khiển? – ManuPK
// Autowire messageSource. Câu trả lời gốc được sửa đổi để phản ánh thay đổi này. @Autowired tin nhắn riêngThông báo nguồnSource; – krishnakumarp
Tôi thường không hiển thị thông báo flash trong bộ điều khiển mà chỉ lưu trữ mã thông báo trong ngữ cảnh flash. Độ phân giải thông điệp i18n'ed sau đó được thực hiện trong khung nhìn hiển thị thông báo flash. –