0

У меня есть две формы на моей странице 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 по:

Я думаю, что блок фильтров запрос, как я упоминал, когда фильтр не там все работает нормально, но я не знаю, почему!

+0

без названного действия трудно поверить, что оно перенаправляется на Mur.xhtml. Используется ли http://stackoverflow.com/questions/2118656/commandlink-commandbutton-ajax-backing-bean-action-listener-method-not-invoked для любого из ваших сценариев? –

+0

Я думаю, что фильтр блокирует запрос, как я уже упоминал, когда фильтр не там, все работает нормально, но я не знаю почему !! .. HTTP Status 500: java.lang.NumberFormatException: null вызвано отсутствием запроса параметр «id_mur», который странный, поскольку он присутствует в URL перенаправления! –

+0

Есть ли какая-либо причина, устанавливающая 'prependId' на' false'? Поместите оператор 'stdout' внутри метода' allerAuSecondMur() ', чтобы убедиться, что он вызван правильно или нет. Проверьте, проверено ли единственное условие в этом методе на правильное логическое значение или нет, и наличие 'ecole.getId()'. – Tiny

ответ

0

У ОП были проблемы, когда его фильтр был включен. Исключение исключения java.lang.NumberFormatException было выбрано всякий раз, когда он это делал.

Более тщательный осмотр фильтра показал возможное исключение NumberFormatException, когда параметр запроса был пустым или пустым или не был числовым.

ФИЛЬТР:

String paramIdMur = request.getParameter("id_mur"); 
int paramTdMurInteger = Integer.parseInt(paramIdMur); 
int idEcoleUtilisateur = utilisateur.getEcole().getId(); 

OP предположил, что эти пары не могут быть пустыми, поскольку он проходит параметры в действии

ДЕЙСТВИЯ:

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"; 
} 

}

Но каждое действие это запрос POST, и фильтр запускается для его urlPatterns.

Так ОП необходимо передать запрос параметров, как

НАЧАТЬ EDIT:

<f:param name="id_mur" value="{gestionSessionBean.id_mur}" /> 

END EDIT в его обидеть commandLink для фильтра, чтобы получить этот параметр.

+0

value = "{gestionSessionBean.id_mur}" –

 Смежные вопросы

  • Нет связанных вопросов^_^