我试图做一个简单的bean方法,但它不起作用,不要在eclispe的控制台中显示syso,当我点击按钮时,它将我的网址更改为http://localhost:8080/Projeto01/index.jsf?jftfdi=&jffi=%2Findex.xhtml
为什么不工作以及为什么要更改这个奇怪网址的网址?
我的msg.java(bean)
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class Msg {
public void show() {
System.out.println("Working Bean Method");
}
}
我的index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<h:head></h:head>
<h:body>
<h:form>
<h:button value="Show" action="#{msg.show()}"></h:button>
</h:form>
</h:body>
</ui:composition>
</html>
和我的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>do0</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
</web-app>
答案 0 :(得分:1)
<h:button>
是一个简单的页面到页面导航按钮。正如您在tag documentation中看到的那样,它根本不支持action
属性。您很可能会将<h:button>
与<h:commandButton>
混淆,后者又会支持该属性。
为了实现按下按钮调用JSF支持bean方法的功能要求,只需将<h:button>
替换为<h:commandButton>
:
<h:commandButton value="Show" action="#{msg.show()}" />
对于目标URL中的jftfdi
和jffi
查询字符串参数,这是Mojarra实现新JSF 2.2流程范围的错误。这在Mojarra 2.2.5中得到修复。请注意,这与您的具体问题无关,因为您不应该首先使用<h:button>
。