我知道这不是关于此的第一个问题,但我未能找到可以解决我的问题的答案。
在我的项目中,我使用 PrimeFaces 3.5 并在 IBM WebSphere AS 7 上运行它。
我创建了一个非常简单的页面来演示这个问题,并希望 SO 社区能帮助我弄清楚:)
所以,这是页面:
<?xml version="1.0" encoding="UTF-8"?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<p:panel>
<c:if test="#{true}">
<h:outputText value="WORKS!!!" />
</c:if>
</p:panel>
</h:body>
</html>
此页面生成以下 HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<head>
<link type="text/css" rel="stylesheet" href="/APP/javax.faces.resource/theme.css.xhtml?ln=primefaces-bluesky" />
<link type="text/css" rel="stylesheet" href="/APP/javax.faces.resource/primefaces.css.xhtml?ln=primefaces" />
<script type="text/javascript" src="/APP/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces"></script>
<script type="text/javascript" src="/APP/javax.faces.resource/primefaces.js.xhtml?ln=primefaces"></script>
</head>
<body>
<div id="j_idt6" class="ui-panel ui-widget ui-widget-content ui-corner-all">
<div id="j_idt6_content" class="ui-panel-content ui-widget-content">
WORKS!!!
</div>
</div>
<script id="j_idt6_s" type="text/javascript">PrimeFaces.cw('Panel','widget_j_idt6',{id:'j_idt6'});</script>
</body>
</html>
我有一个稍微修改的页面:
<?xml version="1.0" encoding="UTF-8"?>
<!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:ui="http://java.sun.com/jsf/facelets"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<p:panel>
<c:if test="#{bean != null}">
<h:outputText value="WORKS!!!" />
</c:if>
</p:panel>
</h:body>
</html>
生成以下 HTML:
<?xml version="1.0" encoding="UTF-8"?>
<!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">
<head>
<link type="text/css" rel="stylesheet" href="/APP/javax.faces.resource/theme.css.xhtml?ln=primefaces-bluesky" />
</head>
<body>
<div id="j_idt6" class="ui-panel ui-widget ui-widget-content ui-corner-all">
<div id="j_idt6_content" class="ui-panel-content ui-widget-content">
WORKS!!!
</div>
</div>
<script id="j_idt6_s" type="text/javascript">PrimeFaces.cw('Panel','widget_j_idt6',{id:'j_idt6'});</script>
</body>
</html>
这两个页面应该已经呈现相同,但它们是不同的。不同的是,后一页缺少相关库primefaces.css
,jQuery
但需要加载。因此,更复杂的页面会失败。但这只发生在我第一次访问页面时。如果我单击浏览器刷新按钮,一切都会以正确的方式生成。
我真的不明白为什么会这样。据我了解JSTL
,之前正在处理标签JSF
。我们可以把它想象成一个普通的JSP
页面,但是没有HTML
布局,后来馈送到JSF
处理程序。所以这不应该影响要加载哪些资源。
我知道我可以强制使用输出链接<h:outputStylesheet>
,<h:outputScript>
但我希望它能够开箱即用。
有任何想法吗?