У меня есть две формы на моей странице Xhtml, первый включает в себя commandLink, который называет ManagedBean метод:Как передать параметр запроса через час: commandLink
<h:form prependId="false">
<h:commandLink action="#{gestionSessionBean.allerAuSecondMur}">
<p><h:graphicImage library="default" name="#{gestionSessionBean.logoSecondMur}" id="LogoEcole" /></p>
<p>Mur <h:outputText value="#{gestionSessionBean.nomSecondMur}"/></p>
</h:commandLink>
</h:form>
Вот метод:
public String allerAuSecondMur() {
if(id_mur == 1) {
return "/resources/restreint/Mur.xhtml?faces-redirect=true&id_mur=" + ecole.getId();
} else {
return "/resources/restreint/Mur.xhtml?faces-redirect=true&id_mur=1";
}
}
вторая имеет CommandButton:
<h:commandButton class="btn btn-primary btn-sm col-xs-offset-3 col-xs-1" value="Partager" id="BoutonPartager" action="#{gestionSessionBean.sauvgarderSujet}" />
для метода:
public void sauvgarderSujet() {
// business stuff
FacesMessage message = new FacesMessage("Fine");
FacesContext.getCurrentInstance().addMessage(null,message);
}
Когда я нажимаю кнопку, она работает нормально (у меня есть глобальное сообщение с информационным классом и словом Fine show после нажатия кнопки), но когда я нажимаю commanLink, действие не вызывается, на самом деле оно перенаправляет меня на страницу: http://localhost:8080/project_name/resources/restreint/Mur.xhtml без параметра запроса.
Затем я сталкиваюсь с HTTP-статусом 500: java.lang.NumberFormatException: null из-за фильтра в моем приложении, для которого требуется параметр запроса, и где фильтра нет, все работает нормально !!
Вот только фильтр, обратите внимание, что ConnexionUtilisateurBean является SessionScoped Bean
public static final String CONNEXION_UTILISATEUR_BEAN = "connexionUtilisateurBean";
public static final String PAGE_ACCUEIL = "/resources/accueil.xhtml";
public static final String MUR = "/resources/restreint/Mur.xhtml?id_mur=";
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpSession session = request.getSession();
UtilisateurDao utilisateurDao = new UtilisateurDao();
ConnexionUtilisateurBean connexionUtilisateurBean = (ConnexionUtilisateurBean) session.getAttribute(CONNEXION_UTILISATEUR_BEAN);
Utilisateur utilisateur = connexionUtilisateurBean.getUtilisateur();
String paramIdMur = request.getParameter("id_mur");
int paramTdMurInteger = Integer.parseInt(paramIdMur);
int idEcoleUtilisateur = utilisateur.getEcole().getId();
boolean problemeAuNiveauIdentifiantMur = (paramTdMurInteger != 1) && paramTdMurInteger != idEcoleUtilisateur;
if (utilisateurDao.evaluerExistenceUtilisateur(utilisateur.getEmail()) == null) {
response.sendRedirect(request.getContextPath() + PAGE_ACCUEIL);
} else if (problemeAuNiveauIdentifiantMur) {
response.sendRedirect(request.getContextPath() + MUR + 1);
} else {
filterChain.doFilter(request, response);
}
}
Заранее спасибо
EDIT: от комментариев Op по:
Я думаю, что блок фильтров запрос, как я упоминал, когда фильтр не там все работает нормально, но я не знаю, почему!
без названного действия трудно поверить, что оно перенаправляется на Mur.xhtml. Используется ли http://stackoverflow.com/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invoked для любого из ваших сценариев? –
Я думаю, что фильтр блокирует запрос, как я уже упоминал, когда фильтр не там, все работает нормально, но я не знаю почему !! .. HTTP Status 500: java.lang.NumberFormatException: null вызвано отсутствием запроса параметр «id_mur», который странный, поскольку он присутствует в URL перенаправления! –
Есть ли какая-либо причина, устанавливающая 'prependId' на' false'? Поместите оператор 'stdout' внутри метода' allerAuSecondMur() ', чтобы убедиться, что он вызван правильно или нет. Проверьте, проверено ли единственное условие в этом методе на правильное логическое значение или нет, и наличие 'ecole.getId()'. – Tiny