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>
和faces-config:
<?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)
您的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功能,例如几乎不使用faces-config.xml文件来管理bean定义。你可以改进你的代码:
@ManagedBean
@SessionScoped
public class ProtocoloBean {
public void incluirProtocolo() {
System.out.println("MSG");
}
}
你的faces-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新手,我建议您开始将您的bean声明为@RequestScoped
或@ViewScoped
而不是@SessionScoped
。您可以在此处阅读有关此内容的更多信息:How to choose the right bean scope?
答案 1 :(得分:0)
代码中的两个错误:
您的班级名称的第一个字符应为Captialized。你应该使用&#34; ProtocoloBean&#34;而不是&#34; protocoloBean&#34;
Action属性用于重定向页面,方法类型必须是String而不是void。如果你只想执行一些代码,那么你应该使用&#34; actionListener&#34;而不是&#34; action&#34;,在这种情况下,您的方法返回类型可以为void,但请确保(ActionEvent操作)被定义为您的方法输入参数