我正在寻找为自定义JSF 2复合组件库生成文档.复合组件未在任何faces-config.xml文件中引用,而是复合组件的.xhtml文件存储在META-INF/resources中,并使用新的composite:interface标签来定义接口.
对于JSP标记库,可以使用https://taglibrarydoc.dev.java.net/生成文档,我想知道我的JSF 2复合组件库是否有类似的东西.
documentation jsf facelets documentation-generation composite-component
我有一个关于在JSF中输出对象列表作为逗号分隔列表的问题.
让我们说:
public class SomeObj {
private String name;
... constructors, getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)
和列表<SomeObj>:
List<SomeObj> lst = new ArrayList<SomeObj>();
lst.add(new SomeObj("NameA"));
lst.add(new SomeObj("NameB"));
lst.add(new SomeObj("NameC"));
Run Code Online (Sandbox Code Playgroud)
将其作为列表框输出我可以使用此代码:
<h:selectManyListbox id="id1"
value="#{listHolder.selectedList}">
<s:selectItems value="#{listHolder.lst}"
var="someObj"
label="#{someObj.name}"/>
<s:convertEntity />
</h:selectManyListbox>
Run Code Online (Sandbox Code Playgroud)
但输出列表的最简单方法是什么,逗号分隔?像这样:
NameA, NameB, NameC
Run Code Online (Sandbox Code Playgroud)
我应该使用JSTL <c:forEach />还是可以使用<s:selectItems />标签?
我已经将Facelet视图模板声明如下:
<ui:composition template="./templates/master.xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
<ui:define name="content">
<h:panelGroup rendered="#{!current.hasLoggedIn()}">
<h:panelGroup layout="block" styleClass="warningBox">
<h:outputText value="#{app.youHaveNotLoggedIn}"/>
<br/>
<h:link value="#{lbls.login}" outcome="login"/>
</h:panelGroup>
</h:panelGroup>
<h:panelGroup rendered="#{current.hasLoggedIn()}">
<p:panel>
<f:facet name="header">
<h:outputText value="#{lbls.requestWaggon}" />
</f:facet>
<h:form id="frmRequest">
<h:panelGrid columns="3" footerClass="buttons">
<h:outputText value="#{lbls.number}:"/>
<h:inputText id="number" label="#{lbls.number}" styleClass="ltr" value="#{requestWaggon.request.number}" readonly="true" />
<h:message for="number" infoClass="info" warnClass="warning" errorClass="error" fatalClass="fatal"/>
<h:outputText value="#{lbls.requestDate}:"/>
<h:panelGroup>
<h:inputText styleClass="date ltr" id="date" label="#{lbls.requestDate}" value="#{requestWaggon.request.date}" required="true">
<f:converter converterId="ir.khorasancustoms.DateConverter"/>
</h:inputText>
<input type="button" value="..." onclick="displayDatePicker('frmRequest:date', this);" class="datePicker"/>
</h:panelGroup>
<h:message for="date" infoClass="info" warnClass="warning" errorClass="error" fatalClass="fatal"/>
<h:outputText value="#{lbls.nameOfMaterialOwner}:"/>
<h:inputText …Run Code Online (Sandbox Code Playgroud) 我问了这个问题,虽然答案直接满足了我的需求,但我仍然觉得必须有一个更简单的解决方案来解决这个问题.
我想有一个复合组件接受一个项目列表(商定的项目类型,以便成员可以在复合组件中自由使用)
CC(复合组件)显示项目列表并允许项目的加法和减法.
我想以最简单有效的方式做到这一点.
为了说明问题,一个例子:

定义应该相当简单(当然,除非:-)):
<special:dynamicFieldList value="#{bean.fieldList} />
Run Code Online (Sandbox Code Playgroud)
Field对象最抽象的形式是:
public class Field{
String uuid;
String value;
}
Run Code Online (Sandbox Code Playgroud)
我猜就是这样.你会如何以简单的方式实现这一点?
谢谢!
我多年来一直在使用前缀映射,并决定切换到后缀映射,只是为了/faces真正摆脱url.在我挖洞之前,我只是想检查一下我是否朝着正确的方向前进,因为有一些意想不到的事情正在发生.我改变了这个:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
对此:
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)
然后我看到所有内容FacesServlet都.xhtml
附加到它上面,因此浏览器正在请求background.png.xhtml文件,
style.css.xhtml文件 - 这是正确的吗?我认为它被称为后缀映射,但它看起来有些凌乱,我试图说服自己这是要走的路.
在我引用URI的CSS文件中,我还必须附加.xhtml:
background-image: url(images/background.png.xhtml);
Run Code Online (Sandbox Code Playgroud)
然后我看到BalusC的一篇帖子提供了一个解决方案,可以防止资源下载而无需通过FacesServlet:
<security-constraint>
<display-name>Restrict raw XHTML docs</display-name>
<web-resource-collection>
<web-resource-name>XHTML</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
Run Code Online (Sandbox Code Playgroud)
当我添加这个时,只有真实.xhtml文件加载到页面上,所有其他资源(尽管已经.xhtml附加)不显示.
我想知道的是:
这是否适用.xhtml于一切正常(对不起,如果这几年最愚蠢的问题)
为什么'限制原始xhtml文档'安全约束会阻止加载CSS,JavaScript和图像等资源?
感谢您的任何反馈.我在Glassfish 3.1上使用Mojarra 2.1.2.
我想问一个问题,我有一个像这样的主模板
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>Login</title>
</h:head>
<h:body>
<div id="top">
<ui:insert name="top">
<ui:include src="header.xhtml" id="header"/>
</ui:insert>
</div>
<div>
<div id="content">
<ui:insert name="content"></ui:insert>
</div>
</div>
<div id="bottom" style="position: absolute;top: 675px;width: 100%" align="center">
<ui:insert name="bottom">
<ui:include src="footer.xhtml" id="footer"/>
</ui:insert>
</div>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
在我的每一页上我都使用这样的东西
<?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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>City Setup</title>
</h:head>
<h:body>
<ui:composition …Run Code Online (Sandbox Code Playgroud) 我正试图在多次战争之间共享一个错误页面(error.xhtml).它们都是一个大耳朵应用程序,并且都使用一个常见的jar库,我想把它放在这里.
错误页面应使用web.xml或更好的web-fragment.xml,并将声明为标准java ee错误页面.
实际EAR结构:
EAR
EJB1
EJB2
WAR1 (using CommonWeb.jar)
WAR2 (using CommonWeb.jar)
WAR3 (using CommonWeb.jar)
Run Code Online (Sandbox Code Playgroud)
只是将错误页面放在META-INF/resources下面将不起作用,因为它不是资源.
我想尽可能少地配置每个war文件.
我正在使用Glassfish 3.1,但我希望尽可能使用Java EE 6标准.
我现在已经读了好几遍:一些开发人员并不主张在他们的XHTML文件中使用HTML标签交换JSF/Facelets标签.显然,HTML标签不会成为UI组件树的一部分,但它的缺点是什么?
我经常找到作者做这种混合的代码示例:
http://www.ibm.com/developerworks/java/library/j-facelets/
http://www.packtpub.com/article/facelets-components-in-jsf-1.2
http://oreilly.com/catalog/9780596529246
"Seam in Action"还交错了JSF/Facelets和HTML标签.
我对实际使用的内容感到困惑.我开始混合标签,但我开始相信它可能不是正确的选择.但是,我不明白为什么纯粹的方法是可取的.
我肯定知道我有一个表,其中JSF数据表没有给我足够的灵活性来显示我需要的东西,所以这样做是不可能的.
此外,我想知道为什么上面的例子都没有使用f:view等而不是硬编码的html,head,body等标签.
有人可以帮我清楚一下吗?
我有一个JSP
<%@taglib uri="http://java.sun.com/jsf/facelets" prefix="ui" %>
Run Code Online (Sandbox Code Playgroud)
但它有错误
绝对的uri:http://java.sun.com/jsf/facelets无法在web.xml或使用此应用程序部署的jar文件中解析
我有图书馆facelets-lib.jar和jsf-facelets-1.1.10.jar,我想是的Facelets,但它们不包含JSP标签库描述符.
什么文件是正确的?
标题真的说明了一切.我已经尝试了失败的错误:
Illegal attempt to pass arguments to a composite component lookup expression (i.e. cc.attrs.[identifier]).
我的尝试看起来像这样:
<composite:interface>
<composite:attribute name="removeFieldAction" method-signature="void action(java.lang.String)" />
</composite:interface>
<composite:implementation>
<h:commandButton value="Remove" action="#{cc.attrs.removeFieldAction('SomeString')}"/>
</composite:implementation>
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?