2

在我开始提出我的问题之前,这是我不幸的局限性:

  1. 我使用的是 JSF 1.2,而不是 2;所以没有复合组件。
  2. 我正在使用 JSP 而不是 facelets 进行渲染;所以这些复合组件也没有。
  3. 我不允许使用任何第 3 方标签库(richFaces、iceFaces 等)

这些限制是一成不变的。

现在转到我的问题。目前,我们有一个subview处理创建地址的 JSP。有很多与此相关的 javascript,以及一个支持 bean。此页面从不直接使用。相反,它使用<jsp:include />.

但是,我希望能够更改几个属性。例如,是否需要县,我们目前是否在进行地址清理等。为了做到这一点,使用自定义组件是有意义的(我认为?)。但是,我不确定执行此操作的最佳方法。

如果可以的话,我会简单地将这个 JSP 变成一个复合组件并完成它。但是,基于我的限制,这并不是一个真正的选择。

我有哪些选择?如果不是因为涉及的 javascript 数量,这不会那么困难。我知道我的解释含糊不清;但是,我更多的是寻求指导而不是直接答案。我搜索了诸如使用 javascript 的自定义 JSF 1.x 组件等内容。但是,我没有找到很多好的文章。

提前致谢。

4

1 回答 1

2

创建一个 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 配置):

<%@ taglib prefix="my" tagdir="/WEB-INF/tags" %>
...
<my:foo showAddress="true" />

请注意,JSTL 在这里也是一个“查看构建时间”标签,就像在 Facelets 中一样。另请注意,您不能使用#{}引用 JSP 标记属性。

于 2012-02-25T05:47:01.660 回答