Bạn cố tạo URL không hợp lệ - đoạn (#
) luôn là phần cuối cùng của URL.
return "view?faces-redirect=true#msg"
sẽ là URL chính xác.
Thật không may rằng đoạn bị tước bỏ theo mặc định NavigationHandler
, ít nhất là trong JSF 2.2.
Trong khi hai tùy chọn của BalusC cũng đang hoạt động, tôi có tùy chọn thứ ba để cung cấp. Quấn NavigationHandler
và ViewHandler
với một bản vá nhỏ:
public class MyViewHandler extends ViewHandlerWrapper {
public static final String REDIRECT_FRAGMENT_ATTRIBUTE = MyViewHandler.class.getSimpleName() + ".redirect.fragment";
// ... Constructor and getter snipped ...
public String getRedirectURL(final FacesContext context, final String viewId, final Map<String, List<String>> parameters, final boolean includeViewParams) {
final String redirectURL = super.getRedirectURL(context, viewId, removeNulls(parameters), includeViewParams);
final Object fragment = context.getAttributes().get(REDIRECT_FRAGMENT_ATTRIBUTE);
return fragment == null ? redirectURL : redirectURL + fragment;
}
}
public class MyNavigationHandler extends ConfigurableNavigationHandlerWrapper {
// ... Constructor and getter snipped ...
public void handleNavigation(final FacesContext context, final String fromAction, final String outcome) {
super.handleNavigation(context, fromAction,
storeFragment(context, outcome));
}
public void handleNavigation(final FacesContext context, final String fromAction, final String outcome, final String toFlowDocumentId) {
super.handleNavigation(context, fromAction,
storeFragment(context, outcome), toFlowDocumentId);
}
private static String storeFragment(final FacesContext context, final String outcome) {
if (outcome != null) {
final int hash = outcome.lastIndexOf('#');
if (hash >= 0 && hash + 1 < outcome.length() && outcome.charAt(hash + 1) != '{') {
context.getAttributes().put(MyViewHandler.REDIRECT_FRAGMENT_ATTRIBUTE, outcome.substring(hash));
return outcome.substring(0, hash);
}
}
return outcome;
}
}
(tôi đã phải tạo ra các wrapper cho ViewHandler dù sao, vì bản sửa lỗi cho JAVASERVERFACES-3154)
Nguồn
2017-06-30 09:55:32
Tốt nghĩ rằng mảnh JS. Ngoài ra, 'ExternalContext # redirect()' hoạt động rất nhiều. Một lần nữa, một câu trả lời hay :) – bluefoot