JSF 不生成 HTML 输出,而是在 HTML 输出中可见纯 JSF 源代码

Posted

技术标签:

【中文标题】JSF 不生成 HTML 输出,而是在 HTML 输出中可见纯 JSF 源代码【英文标题】:JSF doesn't generate HTML output, instead plain JSF source code is visible in HTML output 【发布时间】:2013-09-27 15:51:26 【问题描述】:

我正在做我的课程期末作业,但我遇到了一些关于 JSF 和 html5 的问题。在问这个之前,我阅读了this 和this 的答案。

在我的项目设置中(属性 -> 项目方面)我有:

Java:1.6 动态 Web 项目:2.5 JSF:2.0 (Mojarra 2.0.3)

我创建了单独的 HTML5 文件,现在我想将我的 Java 软件与我的前端代码合并。但是我遇到了问题,JSF 不呈现 .html 文件。

这是我的原始 HTML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE HTML>
<html xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <meta charset="utf-8">
        <meta name="description" content="">
        <meta name="author" content="Fernando Paladin">
        <title>Locus - Disciplinas </title>

        <link href="../../css/bootstrap.css" rel="stylesheet">
        <link href="../../css/custom.css" rel="stylesheet">
    </h:head>
    <h:body>

        <div class="container">
            <div class="row">
                <div class="col-lg-8 center">
                    <h:form role="form">
                        <div class="form-group">
                            <div class="col-md-10">
                                <h:inputText id="disciplina" class="form-control" value="#disciplinaMBean.nome" />
                                <!--  <input type="text" size="20" class="form-control" id="disciplina" placeholder="Pesquise ou crie uma nova disciplina" 
                                required>  -->
                            </div>
                            <div class="col-md-2">
                                <h:commandButton class="btn btn-md btn-success" action="#disciplinaMBean.cadastrar">
                                    Adicionar
                                </h:commandButton>
                                <!--  <a type="button" href="#" class="btn btn-md btn-success">Adicionar</a> -->
                            </div>
                        </div>

                        <div class="col-md-10">
                            <div class="form-group">
                                <br/>
                                <h:dataTable value="#disciplinaMBean.listaDisciplinas" var="disciplina">
                                    <h:column>
                                        <f:facet name="header">Nome</f:facet>
                                        <h:outputText value="#disciplinaMBean.nome" />
                                    </h:column>
                                </h:dataTable>
                                <!-- <textarea class="form-control" placeholder="Aqui vão ser carregadas as disciplinas" rows="5"></textarea> -->
                            </div>
                        </div>
                    </h:form>
                </div>
            </div>


        </div>

        <!-- javascripts e Complementos -->
        <script src="../../js/jquery.js"></script>
        <script src="../../js/bootstrap.min.js"></script>
        <script src="../../js/bootstrap-progressbar.min.js"></script>

    </h:body>
</html>

这就是渲染的内容:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE HTML>
<html xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
    <meta charset="utf-8">
    <meta name="description" content="">
    <meta name="author" content="Fernando Paladin">
    <title>Locus - Disciplinas </title>

    <link href="../../css/bootstrap.css" rel="stylesheet">
    <link href="../../css/custom.css" rel="stylesheet">
</h:head>
<h:body>
    <div class="container">
        <div class="row">
            <div class="col-lg-8 center">
                <h:form role="form">
                    <div class="form-group">
                        <div class="col-md-10">
                            <h:inputText id="disciplina" class="form-control" value="#disciplinaMBean.nome" />
                            <!--  <input type="text" size="20" class="form-control" id="disciplina" placeholder="Pesquise ou crie uma nova disciplina" 
                            required>  -->
                        </div>
                        <div class="col-md-2">
                            <h:commandButton class="btn btn-md btn-success" action="#disciplinaMBean.cadastrar">
                                Adicionar
                            </h:commandButton>
                            <!--  <a type="button" href="#" class="btn btn-md btn-success">Adicionar</a> -->
                        </div>
                    </div>

                    <div class="col-md-10">
                        <div class="form-group">
                            <br/>
                            <h:dataTable value="#disciplinaMBean.listaDisciplinas" var="disciplina">
                                <h:column>
                                    <f:facet name="header">Nome</f:facet>
                                    <h:outputText value="#disciplinaMBean.nome" />
                                </h:column>
                            </h:dataTable>
                            <!-- <textarea class="form-control" placeholder="Aqui vão ser carregadas as disciplinas" rows="5"></textarea> -->
                        </div>
                    </div>
                </h:form>
            </div>
        </div>
    </div>

    <!-- JavaScripts e Complementos -->
    <script src="../../js/jquery.js"></script>
    <script src="../../js/bootstrap.min.js"></script>
    <script src="../../js/bootstrap-progressbar.min.js"></script>

</h:body>

如您所见,我的原始文件是渲染文件。所以,我不能点击任何字段,不能在输入中输入文本,最终,我什么也做不了。

这是怎么引起的,我该如何解决?

【问题讨论】:

【参考方案1】:

您忘记调用 JSF 的 FacesServlet。这是负责这项工作的人。仔细查看您在浏览器地址栏中键入的 URL,并确保它与您在 webapp 的 web.xml 中定义的 FacesServlet 中的 &lt;url-pattern&gt; 匹配。或者,只需将&lt;url-pattern&gt; 更改为*.xhtml(或*.html,如果这是您的物理文件扩展名并且您打算通过JSF 运行所有.html URL),这样您就不需要摆弄虚拟URL。

请注意,这个问题与您最初抱怨的 HTML5 完全无关。

另见:

JSF Facelets: Sometimes I see the URL is .jsf and sometimes .xhtml. Why? Our servlets wiki page - 学习有关 servlet 的必备基础知识

【讨论】:

感谢 BalusC,现在可以了!我只是想知道,没有办法从IDE做到这一点? (我正在使用日食)。我这么说是因为这个问题的答案可以帮助人们。非常感谢你! 不客气。至于你的新问题,我不明白你在问什么。 “有办法”?只需启动服务器并在您喜欢的网络浏览器中打开页面/书签。 对不起。当我在课堂上配置我的项目时,我的老师教了如何通过图形方式配置这个 ,而不需要进入 web.xml 并编辑这个文件。我想要一种配置 web.xml 的图形方式。 只需双击web.xml 文件并编辑源代码。无需直观地编辑代码。只需通过文本编辑真实代码,否则您将一无所获。 哦,你理解错了 :( 是的,你是对的,忘记我的意思。该死的语言障碍!哈哈。再见,谢谢。

以上是关于JSF 不生成 HTML 输出,而是在 HTML 输出中可见纯 JSF 源代码的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2.1 中的 HTML 4 <按钮>

如何使用 html 5 按钮执行 jsf 操作

将静态 HTML(无效 XHTML)文件包含到 JSF Facelets

Java:如何从 JSP JSF 页面生成 PDF 文件?

jsf 2.0 中的不可见评论? [复制]

R中的reactablefmtr包在RStudio查看器中生成表,但不是在新窗口中输出html [关闭]