Javascript jsp:include中的jsf1.2自定义组件
在我开始提问之前,以下是我不幸的局限性:Javascript jsp:include中的jsf1.2自定义组件,javascript,jsp,jsf,jsf-1.2,jspinclude,Javascript,Jsp,Jsf,Jsf 1.2,Jspinclude,在我开始提问之前,以下是我不幸的局限性: 我使用的是JSF1.2,而不是2;所以没有复合组件 我使用JSP进行渲染,而不是facelets;因此,这些复合组件中也没有一个 我不允许使用任何第三方标记库(richFaces、iceFaces等) 这些限制是一成不变的 现在进入我的问题。目前,我们有一个JSP子视图,用于处理创建地址的问题。有很多javascript与此一起使用,还有一个支持bean。本页从不直接使用。相反,它是使用包含的 但是,我希望能够更改几个属性。例如,是否需要county,我
子视图
,用于处理创建地址的问题。有很多javascript与此一起使用,还有一个支持bean。本页从不直接使用。相反,它是使用
包含的
但是,我希望能够更改几个属性。例如,是否需要county,我们目前是否正在进行地址清理等。为了做到这一点,使用自定义组件(我认为?)是有意义的。然而,我并不确定最好的方法是什么
如果可以的话,我会简单地将这个JSP转换成一个复合组件并完成它。然而,基于我的局限性,这并不是一个真正的选择
我有什么选择?如果没有涉及到大量的javascript,这就不会那么困难了。我知道我的解释含糊不清;然而,我更多的是寻求指导,而不是直接的答案。我在谷歌上搜索过一些东西,比如带有javascript的自定义JSF1.x组件等。但是,我没有找到多少好文章
提前感谢。创建一个JSP标记文件
/WEB-INF/tags/foo.tag
<%@ tag body-content="empty" %>
<%@ attribute name="countryRequired" required="false" type="java.lang.Boolean" %>
<%@ attribute name="showAddress" required="false" type="java.lang.Boolean" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<h:panelGrid columns="2">
<h:outputLabel for="country" value="Country" />
<h:inputText id="country" value="#{bean.country}" required="${countryRequired}" />
<c:if test="${showAddress}">
<h:outputLabel for="address" value="Address" />
<h:inputText id="address" value="#{bean.address}" />
</c:if>
</h:panelGrid>
按如下方式声明和使用它(无需额外的XML配置):
...
注意,JSTL在这里也是一个“视图构建时”标记,就像在Facelets中一样。另外请注意,您不能使用
#{}
引用JSP标记属性。听起来好像他们希望您戴拳击手套时从胡椒粉中取出蝇粪。我去过那里。听起来您想在表单字段上添加自定义验证。真正的问题是,为什么jsp:include
会放弃这个?除了学习如何在JSF1.2规范下编写定制组件之外,定制组件还能带来什么?如果它这么简单的话!没有使用JSF验证器进行验证。甚至没有定义所需的属性。他们不想改变这一点。除了验证之外,还有许多其他定制需要完成。例如,每个地址可以附加到不同的联系人,其contactId(联系人表的PK)需要预先定义。还有一个显示逻辑:这个地址可以是合法地址吗?一个使用lat/long定义的地址,而不是邮寄地址。@Zack。。。我刚刚注意到你是一个银泽人,如果你有机会和我聊天,我会为我们创造一个房间。我想谈谈这个。我创建了一个叫Zack和Maple_shaft room的房间。在接下来的几个小时里,我会在那里呆上几个小时,看看你是否出现。这似乎是一个很好的解决方案。在添加属性时,我仍然可以使用EL,对吗<代码>
<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:foo showAddress="true" />