使用绑定的 JSF/Facelets 组件

发布于 2024-11-07 06:05:56 字数 1470 浏览 0 评论 0原文

我正在创建一个简单的 JSF/Facelets 组件,可用于指定时间间隔:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:jstl="http://java.sun.com/jsp/jstl/functions" version="2.0">
<ui:component>
    <h:panelGrid columns="2" cellpadding="2">
        <rich:inputNumberSpinner value="#{durationBean.duration}"/>
        <h:selectOneMenu value="#{durationBean.unit}">
            <f:selectItem itemValue="sec" itemLabel="Second/s"/>
            <f:selectItem itemValue="min" itemLabel="Minute/s"/>
            <f:selectItem itemValue="hou" itemLabel="Hour/s"/>
            <f:selectItem itemValue="day" itemLabel="Day/s"/>           
        </h:selectOneMenu>
    </h:panelGrid>                  
</ui:component>
</jsp:root>

我想将此标记用作:

<time:interval value="#{myBean.intervalInMilliseconds}"/>

因此组件本身会转换单位并返回以毫秒为单位的值。 问题是,为此使用 Facelets,表达式 value="#{myBean.intervalInMilliseconds}" 部分中计算,所以我无法按原样传递值表达式。 如何创建自定义组件而无需编写标记/属性(普通 JSF 组件),而是使用 Facelets 并处理输入/输出表达式?

I'm creating a simple JSF/Facelets component, useful to specify time intervals:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:t="http://myfaces.apache.org/tomahawk"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:jstl="http://java.sun.com/jsp/jstl/functions" version="2.0">
<ui:component>
    <h:panelGrid columns="2" cellpadding="2">
        <rich:inputNumberSpinner value="#{durationBean.duration}"/>
        <h:selectOneMenu value="#{durationBean.unit}">
            <f:selectItem itemValue="sec" itemLabel="Second/s"/>
            <f:selectItem itemValue="min" itemLabel="Minute/s"/>
            <f:selectItem itemValue="hou" itemLabel="Hour/s"/>
            <f:selectItem itemValue="day" itemLabel="Day/s"/>           
        </h:selectOneMenu>
    </h:panelGrid>                  
</ui:component>
</jsp:root>

I want to use this tag as:

<time:interval value="#{myBean.intervalInMilliseconds}"/>

So the component itself converts the units and return the value in ms.
The problem is that, using Facelets for this, the expression value="#{myBean.intervalInMilliseconds}" is evaluated in the <ui:component> section, so I can't pass the value expression as is.
How can create custom components without having to do with tag/attributes writing (plain JSF components) but using Facelets and dealing with input/output expressions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文