2013-05-24 2 views
1

Моей страница index.xhtml содержит это и больше другой вещицу как колонтитул, заголовок, меню и т.д. ...:Командной кнопка не вызывает метод действия, но только обновляет страницу

index.html содержит:

<h:head/> 
<h:body> 
<p:layout fullPage="true"> 
    <p:layoutUnit position="center" > 
    <h:panelGroup id="content" layout="block"> 

    <h:form id="contentform"> 
<!-- Cas page contact == page affichée lors du clic sur contact --> 
    <h:form id="contact"> 
     <h:panelGroup rendered="#{navBean.page == 'contact'}"> 
     <ui:include src="contact.xhtml" /> 
     </h:panelGroup> 
    </h:form> 
    </h:form> 
<!--Fin de gestion des cas possible --> 
</h:panelGroup> 
</p:layoutUnit> 
<!-- Fin layout central --> 
</p:layout> 
</h:body> 

Я использую JSF 2.1 и PrimeFaces. У меня есть кнопка следующей команды на contact.xhtml:

<h:head/> 
<h:body> 
    <p:commandButton value="Envoie la sauce" action="#{mail.sendEmail()}" > 
    <f:ajax execute="@form" render="@form" /> 
    </p:commandButton> 
</h:body> 

Это относится к следующему действию боба:

@ManagedBean(name="mail") 
@SessionScoped 
public class MailBean { 
public void sendEmail() throws IOException { 
    Properties props = new Properties(); 
    props.put("mail.smtp.host", "smtp.gmail.com"); 
    props.put("mail.smtp.socketFactory.port", "465"); 
    props.put("mail.smtp.socketFactory.class", 
      "javax.net.ssl.SSLSocketFactory"); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.port", "465"); 

    Session session = Session.getDefaultInstance(props, 
     new javax.mail.Authenticator() { 
          @Override 
    protected PasswordAuthentication getPasswordAuthentication() { 
    return new PasswordAuthentication("username","password"); 
      } 
     }); 

    try { 

     Message message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("[email protected]")); 
     message.setRecipients(Message.RecipientType.TO, 
       InternetAddress.parse("[email protected]")); 
     message.setSubject("Demande de Contact"); 
     message.setText("Dear Mail Crawler," + 
       "\n\n No spam to my email, please!"); 

     Transport.send(message); 

        //to see if message was send 
     System.out.println("Done"); 

    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } 
} 
} 

Это, как предполагается отправить почту через JavaMail, однако кнопка не делает ничего, кроме Обновление страницы.

Я тестировал класс SendHTMLEmail как автономное приложение Java, оно отлично работает.

Что я пытаюсь сделать, это простая форма контакта, созданная в xhtml с использованием JSF2.1.

UPDATE- Хорошо, некоторые новости сегодня! Если я использую эту вещь: <p:commandButton action="#{mail.send()}"/> на странице index.xhtml что-то случится, я должен определить, почему класс не может найти ...:

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response><error><error-name>class javax.faces.el.EvaluationException</error-name><error-message><![CDATA[/index.xhtml @35,47 action="#{mail.send()}": Target Unreachable, identifier 'mail' resolved to null]]></error-message></error></partial-response> 

НО на contact.xhtml я только это с та же кнопка:

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response><changes><update id="log:messages"><![CDATA[<div id="log:messages" class="ui-messages ui-widget" aria-live="polite"></div>]]></update><update id="javax.faces.ViewState"><![CDATA[-2283025416922274948:-229809047557820449]]></update></changes></partial-response> 

Итак, у меня есть уникальный идентификатор! У кого-то есть идея, что произойдет? edit1: полный код добавлен edit2: добавлен index.html со всеми balises EDIT3: Обнаруженное что-то о кнопке действия на мою страницу Xhtml

+0

Ваш код как-выглядит хорошо и должен работать. Пожалуйста, напишите более реальный пример того, что вы пытаетесь сделать, чтобы найти реальные проблемы. –

+0

Пожалуйста, исключите все возможные причины из http://stackoverflow.com/questions/2118656/hcommandlink-hcommandbutton-is-not-being-invoked/2120183#2120183 – BalusC

+0

Спасибо за указанную ссылку, я исправил некоторую ошибку, сделанную как «You не может вложить несколько компонентов UIForm друг в друга.Нечисленная h: форма не была моей проблемой, я проверил! Я работаю над Netbean, как я могу проверить ajax и javascript называет mabe, нажав? Может быть, он может мне помочь? – Freest

ответ

1

Таким образом, после нескольких дней застряли на этой проблеме я, наконец, найти решение

<h:form id="contact"> 
    <h:panelGroup rendered="#{navBean.page == 'contact'}"> 
    <ui:include src="contact.xhtml" /> 
    </h:panelGroup> 
    </h:form> 

В моем index.xhtml <h:form> были внутри <h:panelgroup>, точнее в моем contact.xhtml! Если я помещаю эти бейлизы в форму за пределами <h:panelGroup>, и не ставьте ни один блейд формы в contact.xhtml, все работает правильно, и щелчок на моей кнопке просто вызывает правильное действие!

Я отправлю окончательный код в мой первый пост! Не стесняйтесь использовать его, если вам нужно! Спасибо всем за помощь, которую вы мне предоставили!

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