2014-02-01 1 views
0

им пытаются научиться JSF, но что-то я потерял, Потому что эта кнопка не отображается сообщение в консоли EclipseJSF не выполнять боб

Java-Bean:

package beans; 

public class protocoloBean { 


    public void incluirProtocolo() { 
     System.out.println("MSG"); 
    } 

} 

XHTML:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:p="http://primefaces.org/ui"> 
<h:head> 

</h:head> 

<h:body> 
    <h:button value="Protocolar" 
     action="#{protocoloBean.incluirProtocolo()}"></h:button> 
</h:body> 
</html> 

и лица-конфигурации:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 
<managed-bean> 
    <managed-bean-name>protocoloBean</managed-bean-name> 
    <managed-bean-class>beans.protocoloBean</managed-bean-class> 
    <managed-bean-scope>session</managed-bean-scope> 
</managed-bean> 
<application/> 
</faces-config> 

что я делаю неправильно? или я потерял :(

ответ

0

две ошибки в коде:.

  1. первый символ вашего имени класса должен быть Captialized Вы должны использовать «ProtocoloBean» insteads из «protocoloBean»

  2. Действие атрибут используется для страницы переадресации, тип метода должен быть String вместо void.Если вы просто хотите выполнить какой-то код, тогда вы должны использовать «actionListener», а не «action», в этом случае тип возвращаемого метода может быть недействительным, но убедитесь, что действие ActionEvent определено как аргумент ввода метода

+0

Основная проблема заключается в том, что OP использует неправильный компонент JSF: ''. Это должно быть ''. Кроме того, о вашем предложении: * вы должны использовать «actionListener», а не «действие», обратитесь к [здесь] (http://stackoverflow.com/q/3909267/1065197), чтобы понять разницу между ними. –

+0

Спасибо за вашу ссылку .. Это действительно дает мне лучшее понимание между действием и действиемListener – tanghao

1

Ваш код JSF неверен. Вы пытаетесь запустить действие, используя <h:button>, когда вам нужно/нужно использовать <h:commandButton>. <h:button> предназначен для навигации. Смотрите здесь разницу между ними: Difference between h:button and h:commandButton

Вы должны обновить свой код:

<h:body> 
    <ui:remove> 
     <h:button value="Protocolar" 
      action="#{protocoloBean.incluirProtocolo()}"></h:button> 
    </ui:remove> 
    <!-- 
     Note that h:commandButton MUST ALWAYS be inside a h:form 
     Otherwise, the action won't fire 
    --> 
    <h:form> 
     <h:commandButton value="Protocolar" 
      action="#{protocoloBean.incluirProtocolo}" /> 
    </h:form> 
</h:body> 

После обновления кода, журнальное сообщение будет напечатано, как и ожидалось.


Поскольку вы изучаете JSF 2.2, я хотел бы предложить начать использовать JSF 2 функции, как едва с помощью файла лица-config.xml для управляемых бинов. Вы можете улучшить свой код к этому:

@ManagedBean 
@SessionScoped 
public class ProtocoloBean { 

    public void incluirProtocolo() { 
     System.out.println("MSG"); 
    } 
} 

и ваши лица-config.xml файл *:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> 
</faces-config> 

* Да, пуст :).

Поскольку вы новичок в JSF, я бы рекомендовал начать объявляя свои бобы в качестве @RequestScoped или @ViewScoped вместо @SessionScoped. Вы cn читаете больше об этом здесь: How to choose the right bean scope?

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