我的JSF应用程序中存在重复ID的问题.我在这篇文章中读过,其中一个可能的解决方案是使用命名容器.你能给我一些例子来说明如何使用命名容器来避免重复的id问题吗?我使用Facelets.
我有一个带有标题和副标题的JSF模板:
<h3><ui:insert name="title"/></h3>
<hr/>
<h5><ui:insert name="subtitle"/></h5>
Run Code Online (Sandbox Code Playgroud)
使用此模板的所有页面都有标题,但并不总是一个副标题:
<ui:define name="title">My Title with no subtitle</ui:define>
Run Code Online (Sandbox Code Playgroud)
当没有副标题时,我不想要<hr/>标签.所以我真正想做的是检查是否subtitle为空,如果是,则忽略代码块.像这样的东西:
<h3><ui:insert name="title"/></h3>
<c:if test="#{not empty subtitle}">
<hr/>
<h5><ui:insert name="subtitle"/></h5>
<c:if>
Run Code Online (Sandbox Code Playgroud)
但当然<c:if test="#{not empty subtitle}">不行.我不知道如何访问subtitle变量的值.
任何的想法 ?
谢谢
我已阅读以下帖子,这非常有帮助 从JSF 1.2迁移到JSF 2.0
但是我遇到了迁移的问题,因为我有一个从FaceletViewHandler扩展的自定义视图处理程序 - 这不是faclets 2的一部分.
我正在迁移JBoss 4.2.2以下内容: - JSF 1.2到JSF 2.0
我也想迁移这些小子 - 我有上述问题.
在我的应用程序中,我也在使用Tomahawk - 这次迁移有什么问题吗?
提前致谢.
ELICO.
Currenty我有一个带有JSF 1.2的Web项目和在tomcat 6.0.18.0中运行的Facelets.我决定升级servlet容器,因此我部署在tomcat 7中,所有看起来都没问题,直到我们使用我的个性化facelet函数命中一个视图.
javax.el.ELException: Failed to parse the expression [{pz:instanceof(object,'com.project.domain.MyClass')}]
Caused by: org.apache.el.parser.ParseException: Encountered " ":" ": "" at line 1, column 5. Was expecting one of:
"}" ...
"." ...
"[" ...
Run Code Online (Sandbox Code Playgroud)
解析以下代码时会发生此错误:
<ui:repeat var="object" value="#{objects}">
<ui:fragment rendered="#{pz:instanceof(object,'com.project.domain.MyClass')}">
...
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,它会因为表达式中的冒号而引发错误.我已将它跟踪到tomcat/lib目录中的jasper-el,如果我用tomcat 6.0.18替换jasper.jar和jasper-el.jar,那么每个标记都可以正常工作.
有没有其他人在升级他们的tomcat之前遇到过这个问题?他们是如何解决的?我可以使用tomcat 6中的这些jasper jar在生产tomcat 7中部署,否则会导致进一步的问题.
也许有人可以启发我.
如果放
<f:metadata>
<f:viewParam name="test" value="#{test.value}"/>
</f:metadata>
Run Code Online (Sandbox Code Playgroud)
在模板内,设置者
setValue永远不会被调用,即调用preRender方法'call()'而不事先调用setter(参见下面的代码示例以供参考).
但是,如果将元数据块放在合成中,则会按预期调用它.
这是正常行为还是我做错了什么?
非常感谢任何见解.
Hanspeter
供参考,这里是非工作版本的完整代码示例:
testtemplate.xhtml
<?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">
<f:metadata>
<f:viewParam name="test" value="#{test.value}"/>
</f:metadata>
<f:event type="preRenderView" listener="#{test.call}" />
<h:head>
<title>Test Template</title>
</h:head>
<h:body>
<ui:insert name="text" />
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
testcomposition.xhtml
<?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">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
template="/templates/testtemplate.xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<ui:define name="text">
some text
</ui:define>
</ui:composition>
Run Code Online (Sandbox Code Playgroud)
这里是工作 …
在JSF和Facelets标签中,这些前缀究竟是什么?
例如:h:head c:catch f:event ui:decorate等
由于所有JSP在执行之前都会生成/转换为Servlet,对于Facelets来说也是如此吗?
我正在使用JSF 2.0和Facelets,并希望看到它生成的Java代码可能是Servlet.
我能够成功地使用我的应用程序中的模板:
<ui:decorate template="/WEB-INF/templates/mytemplate.xhtml">
Run Code Online (Sandbox Code Playgroud)
我还可以移动模板/META-INF/templates/mytemplate.xhtml一的JAR和得到这个工作:
<ui:decorate template="/templates/mytemplate.xhtml">
Run Code Online (Sandbox Code Playgroud)
我实际上想把这个文件放到文件系统(或数据库)上.我怎样才能做到这一点?我发现很多相关的东西com.sun.facelets.impl.DefaultResourceResolver,但我认为这实际上与覆盖模板的服务有关.它不是尝试解析URL,它只是试图以某种方式在类路径上获取文件.
我有一个正在开发的应用程序,我的公司有一个标题横幅,需要在所有页面上.我们在该标题横幅的团队中有大约6个不同的版本,我现在想要制作它以便我只是将源代码中的横幅包含到我的应用中,这样如果他们更新横幅的来源,我的应用版本的横幅也会自动更新.
使用<ui:include src="http://mycompany.com/banner.html" />导致错误The markup in the document following the root element must be well-formed..
即使它没有很好的形成xml,我怎么能包含这个横幅?
我目前的模板:
<!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:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:composition>
<h:body>
<div>
<ui:include src="http://mycompany.com/banner.html" />
</div>
<ui:insert name="content" />
</h:body>
</ui:composition>
</html>
Run Code Online (Sandbox Code Playgroud) ORIGINAL JSP(WorkItem.jsp)
<c:forEach var="actionItem" items="${workItem.work_action_list}">
<c:if test="${actionItem.workActionClass.work_action_type_id == '1'}" >
<%@ include file="inc_done_button.jsp" %>
</c:if>
<c:if test="${actionItem.workActionClass.work_action_type_id == '2'}" >
<c:set var="actionItem" value="${actionItem}" scope="request" />
<c:set var="checklist" value="${actionItem.meat}" scope="request" />
<jsp:include page="inc_dynamic_checklist_v.jsp" flush="true" />
</c:if>
etc...
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
原始Java
for (ListIterator<WorkflowInstanceWorkItemAction> actionIter = wfiwi.getWork_action_list().listIterator(); actionIter.hasNext();) {
if ("2".equals(work_action_type_id)) {
ChecklistInstanceForm ciForm = new ChecklistInstanceForm(this, authenticatedUser);
ChecklistInstance ci = null;
ci = (ChecklistInstance) ciForm.getChkLstInstanceByWfiWiaOwner(wfiWorkItemAction, authenticatedUser);
// Get the meat details for this action and inject it into the object
wfiWorkItemAction.setMeat(ci);
} …Run Code Online (Sandbox Code Playgroud) facelets ×10
jsf ×9
jsf-2 ×3
compilation ×1
composition ×1
el ×1
external ×1
java ×1
java-ee ×1
jsp ×1
resources ×1
servlets ×1
tomcat7 ×1
viewparams ×1