在JSF <h:outputStylesheet>,<h:outputScript>和<h:graphicImage>组件具有library属性.这是什么以及如何使用它?Web上有很多示例,它们使用如下公共内容/文件类型css,js以及img(或image)作为库名称,具体取决于所使用的标记:
<h:outputStylesheet library="css" name="style.css" />
<h:outputScript library="js" name="script.js" />
<h:graphicImage library="img" name="logo.png" />
Run Code Online (Sandbox Code Playgroud)
它有用吗?library这些示例中的值似乎只是重复标记名称已经表示的内容.对于<h:outputStylesheet>它来说,基于标签名称已经很明显它代表了一个"CSS库".与以下内容有什么不同,它们的工作方式相同?
<h:outputStylesheet name="css/style.css" />
<h:outputScript name="js/script.js" />
<h:graphicImage name="img/logo.png" />
Run Code Online (Sandbox Code Playgroud)
此外,生成的HTML输出有点不同.给定URL模式的上下文路径/contextname和FacesServlet映射*.xhtml,前者生成以下HTML,其库名称为请求参数:
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/style.css.xhtml?ln=css" />
<script type="text/javascript" src="/contextname/javax.faces.resource/script.js.xhtml?ln=js"></script>
<img src="/contextname/javax.faces.resource/logo.png.xhtml?ln=img" alt="" />
Run Code Online (Sandbox Code Playgroud)
而后者在URI的路径中生成以下带有库名的HTML:
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml" alt="" />
Run Code Online (Sandbox Code Playgroud)
后一种方法在事后看来也比前一种方法更有意义.该library属性究竟有用吗?
我已经完成了关于Facelets模板的教程.
现在我尝试创建一个与模板不在同一目录中的页面.我有页面样式的问题,因为样式用相对路径引用,如下所示:
<link rel="stylesheet" href="style_resource_path.css" />
Run Code Online (Sandbox Code Playgroud)
我可以通过以下开头使用绝对引用/:
<link rel="stylesheet" href="/project_root_path/style_resource_path.css" />
Run Code Online (Sandbox Code Playgroud)
但是,当我将应用程序移动到不同的环境时,这将给我带来麻烦.
所以我想知道在Facelets中引用CSS(以及JS和图像)资源的最佳方法是什么?
我正在展示非常敏感的数据.用户从我的服务器注销后,我不希望其他用户能够看到数据点击浏览器的"后退"按钮.
我怎样才能做到这一点?
我想了解'javax.faces.PROJECT_STAGE'属性对JSF应用程序的影响.下面的链接中提供了一个很好的用例
http://css.dzone.com/news/jsf-20-new-feature-preview-ser
http://www.java-tutorial.ch/java-server-faces/jsf-project-stage
除了提供验证错误消息之外,还有其他用例,这个属性真的有用吗?我知道我们可以检查这个变量来识别环境并改变某些功能,但是JSF会自动帮助开发人员吗?如果您可以分享项目的经验,那会很棒吗?
我正在使用JSF 2.2 + Primefaces开发WebApp ...项目正在快速增长,并且第一次性能测试非常差(由于我对JSF LifeCylce在非功能性需求方面的知识不足 - 即完全是ajax网站),然后我们可以改善一点,但结果仍然不如预期.(根据动作,我们有300~1500毫秒的时间,想法是性能大约500毫秒,给予或采取).主要是恢复视图阶段和渲染响应是消费者(在其他情况下,花费的时间毫无价值)的时间.对于某些操作,Invoke Aplication也需要时间(由于DB调用).
在网上阅读了很多文章后,有很多很棒的技巧要考虑(当然很多来自stackoverflow),例如:
- 改善数据库查询
我们有一些复杂的,用两个Hibernate Criterias查询完成,所以我们在这里工作.(也许使用纯SQL查询,复杂的查询使用子查询?)
- 永远不要在Bean的getter上定义业务逻辑
得到它了!
- 将适当的范围设置为bean并在其上存储只不过是必要的东西
我们有一个完整的ajax站点,所以View Scoped几乎就像Session Scoped一样,我们使用SessionBeans作为一种'Cache'来存储我们不希望每次都从DB获取的关键数据+定义业务逻辑这里.
- 选择正确的JSF状态保存方法 - 客户端Vs服务器
为此,我需要进行更多的研究,检查各种可能性的优缺点,然后测试每一种的可能性.
到目前为止非常清楚,现在一些额外的提示我对此有些怀疑.
- 尽可能使用vanilla HTML,最好使用h:标签而不是p:标签
简单的HTML是清楚的,有意义的,现在在h:和p之间:它值多少钱?例如.
<p:commandButton value="Value"
styleClass="class"
actionListener="#{myBean.doStuff()}"
ajax="true" process="@form" update="@form"
onsuccess="jsFunction()" />
Run Code Online (Sandbox Code Playgroud)
VS
<h:commandButton value="Value"
styleClass="class"
actionListener="#{myBean.doStuff()}" >
<f:ajax execute="@form" render="@form" event="onclick" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)
要么
<ui:fragment... vs <p:fragment...
Run Code Online (Sandbox Code Playgroud)
要么
<p:outputLabel value="#{myBean.value}" rendered="#{myBean.shouldRender}" />
Run Code Online (Sandbox Code Playgroud)
VS
<ui:fragment rendered="#{myBean.shouldRender}">
<label>#{myBean.value}</label>
</ui:fragment>
Run Code Online (Sandbox Code Playgroud)
我一直在使用Primefaces和Jsf标签以及一些简单的HTML混合使用了一段时间.(主要是PF由于其组件的功能)我现在普通的HTML总是会更快,但在JSF和另一个框架之间?如果我这样做,改变它将花费大量时间,我不希望知道它的结果根本没有相关的差异.
- 自定义Facelets标记与复合组件
我认为这是关键.对它们的差异仍有一些疑问,在两者的实现上,CC使用起来非常简单和灵活,但缺点是它们完全包含在ViewTree和JSF为每个请求重新生成(如果我没有记错的话) ,而自定义标签使用起来似乎有点复杂(不是那么多),但其优势在于ViewTree上只包含了实际呈现的内容,仅此而已,使RESTORE VIEW更省时.我们有几个复合组件,没有Facelets标签,所以这里要做很多工作.我还没有找到一篇很好的文章解释它们之间的差异,当一个应该被使用时和另一个(已经读过输入,消息使用TAGS和更复杂的东西CC).如果想要更喜欢标签与CC,那么我将没有选择而不是使用CC?在CC中使用自定义标签是否可以使它们更轻松地用于处理它们?
我即将进入修改孔项目的旅程,以获得更好的性能,这将花费我几天的时间,想法是这次获得更好的结果; 所以每个提示,建议和建议都非常欢迎!谢谢你们的时间!
我们有两种方式可以提供图片,javascript,css等项目.
后者似乎是JSF中的事情.这很容易做到.它有很多支持.
前者在性能重要的情况下允许有趣的技巧.我们可以安排我们的服务器不将/ images传递给servlet引擎,而是使用更快的东西.公平地说,我不知道有没有人使用我们的软件做过这个,或者有多少像Tomcat或JBoss这样的东西服务于Apache等本地的静态内容,以及这与业务逻辑的成本有多大关系这也是为了提供应用程序本身.
我们希望在这两种情况下,图像都能在很长时间内提供,因此浏览器可以缓存它们.我注意到JSF版本有一个查询字符串部分,所以希望浏览器不会决定它知道更好并拒绝缓存.我们必须看一些痕迹,看看发生了什么.
那该怎么办?JSF库?特别是h:outputScript和h:outputStylesheet控件之类的支持?或者网站的图片区域?
谢谢 - 理查德
我正在 Tomcat 上开发一个 JSF web 应用程序,计划在不久的将来使用 Seam,我想添加我们的网页和资源(即 Javascript 和 CSS 文件)的压缩。我知道在 Java web 中 GZIP 响应的三种方法:
使用 Ehcache GZIP 过滤器:它在 Appfuse 中使用,所以它可能是可靠的,它会在应用之前检查用户代理是否支持 GZIP,但它似乎与 Seam 有问题,我们将使用http://seamframework.org/Community /EHCacheGZipFilterIncompatibleWithSeam。
使用 pjl 过滤器。从 stackoverflow 问题:Tomcat Compression does Not Add a Content-Encoding: gzip in the Header,它似乎没有任何内存泄漏,但我不知道它是否有 Seam 问题。
使用 Tomcat 的内置压缩 - 尽管它可能不提供内容编码(Tomcat 6.0.14 似乎工作正常,但您只能为不应应用用户代理压缩的内容提供黑名单。
有没有人在 JSF-Seam 环境中使用过这些方法?哪个是“最佳”解决方案?
谢谢,格伦
我有一个JSF应用程序,我希望在导航中更改浏览器地址栏中的URL.当我打开Home.xhtml并提交表单时,它会显示下一页AppHome.xhtml,但浏览器地址栏中的URL不会更改.
这是提交按钮:
<p:commandButton value="Connect" update="panel" id="ajax" action="#{user.check}" styleClass="ui-priority-primary"/>
Run Code Online (Sandbox Code Playgroud)
这是导航规则:
<navigation-rule>
<from-view-id>/Home.xhtml</from-view-id>
<navigation-case>
<from-outcome>Success</from-outcome>
<to-view-id>/AppHome.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>Failure</from-outcome>
<to-view-id>/Home.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Run Code Online (Sandbox Code Playgroud)
执行此导航时,如何更改浏览器地址栏中的URL?
jsf ×7
jsf-2 ×6
resources ×2
ajax ×1
back-button ×1
browser ×1
facelets ×1
gzip ×1
java ×1
jsf-1.2 ×1
navigation ×1
performance ×1
primefaces ×1
seam ×1
templating ×1
url ×1
web ×1