0

我正在尝试使用 PrimeFaces 3.2。我正在使用 Eclipse Indigo SR2。我正在使用 PrimeFaces 标签创建一个 JSP 页面。该标准<h:commandButton>有效,但<p:commandButton>无效。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html  xmlns:p="http://primefaces.org/ui">
<head>

</head>
<body>
<f:view>
        <h:form>
        <h:commandButton value="Click"></h:commandButton>
        <p:commandButton value="shfgldjfkl"></p:commandButton>
        </h:form>
</f:view>
</body>
</html>

我的输出是这样的:

在此处输入图像描述

当我在 Indigo Service Release 2 中获取 JSF XHTML 页面时,我的代码没有运行,我的页面是空白的。

如何使用 PrimeFaces 3.2?

4

2 回答 2

2

JSP 自 JSF 2.0 起被弃用,并由 Facelets 接替。所有与 JSF 2.0 兼容的组件库(例如 PrimeFaces >2.x)都不再具有用于 JSP 的标记库,而仅用于 Facelets。

您放置在 JSP 文件中的<html xmlns:p="http://primefaces.org/ui">文件根本不会被 JSP 识别。XML 命名空间上的 JSF 标记库仅在 Facelets 中工作。

忘记 JSP。专注于 Facelets。

回到空白页面的 Facelets 问题,确保您有一个<h:head>而不是<head>(否则 JSF/PrimeFaces 将无法自动包含必要的 CSS/JS 文件)并且您的请求 URL 与 URL 模式匹配中FacesServlet定义的web.xml(否则FacesServlet根本不会被调用,因此无法将 JSF 转换为 HTML;您可以通过右键单击确认这一点,在 webbrowser中查看源代码)。

这是完整的 Facelets 片段/demo.xhtml

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>PrimeFaces demo</title>
    </h:head>
    <h:body>
        <h:form>
            <p:commandButton value="submit" />
        </h:form>
    </h:body>
</html>

如果FacesServlet映射到如下web.xml的 URL 模式:*.xhtml

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

然后你可以用 URL 中相同的文件名打开它,而不用摆弄像*.jsf,/faces/*等虚拟 URL:

http://localhost:8080/contextname/demo.xhtml

于 2012-10-18T12:28:20.197 回答
0

好吧,我认为您应该亲自使用 JSF 或 facelet 我从不尝试使用 primeface 实现 JSP,顺便说一下,如果您可以在 JSF 或 facelet 中获得相同的结果,为什么要实现 JSP 所以我建议继续使用 JSF 2.0

于 2012-11-09T01:54:49.723 回答