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
中的 <url-pattern>
匹配。或者,只需将<url-pattern>
更改为*.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
文件并编辑源代码。无需直观地编辑代码。只需通过文本编辑真实代码,否则您将一无所获。
哦,你理解错了 :( 是的,你是对的,忘记我的意思。该死的语言障碍!哈哈。再见,谢谢。以上是关于JSF 不生成 HTML 输出,而是在 HTML 输出中可见纯 JSF 源代码的主要内容,如果未能解决你的问题,请参考以下文章