gpt4 book ai didi

java - 在 JSF primefaces 中动态生成日期标签

转载 作者:行者123 更新时间:2023-11-29 03:15:47 26 4
gpt4 key购买 nike

在一个页面中,我有一个持续时间为 priod(整数月)的 InputText 框和一个用于选择初始日期的 p:calendar 输入。我需要为从初始日期开始的所有月份生成标签(月-年)。例如,如果持续时间为 3,初始日期为 10-dec-2014,则应生成以下三个标签:2014年12月 2015年1月 2015年2月我试着在没有支持 bean 的情况下做到这一点:

<c:forEach var="i" begin="1" end="${myBean.duration}">
<p:outputLabel value=" ${i+myVar} ${year+1900} " />
<h:panelGrid columnClasses="input, slider" columns="2">
<p:inputText id="inputTxt_${i}" style="width:70px;" />
<p:slider for="inputTxt_${i}"
style="padding-left: 100px; margin-left:5px">
<p:ajax event="slideEnd" />
</p:slider>
</h:panelGrid>

但是这样我无法正确生成标签。任何人都知道如何通过使用带有或不带有提交按钮的 JSF 或 Backing bean 来做到这一点(例如使用 event="keyup"或 event="dateSelect"等事件)??

最佳答案

我认为您的 xhtml-Structure 不正确。

  • 您缺少结尾 </c:forEach>
  • 如果在代码片段末尾关闭,您将得到 {i} slider

假设您想要一个 slider 和 {i}日期输出

  • 建立一个 BackingBean 来保存你的值
  • 值是:“monthCount”保存整数,“dateList”保存(计算的)日期
  • listener-根据 slider 输入的整数计算日期的方法public void listenerMonthCount(SlideEndEvent ae)

    <h:form id="form">
    <h:panelGrid columns="2">
    <p:inputText id="monthCount" style="width:70px;" value="#{backingBean.monthCount}" />
    <p:slider for="monthCount" style="padding-left: 100px; margin-left:5px" maxValue="12">
    <p:ajax event="slideEnd" process="@form" listener="#{backingBean.listenerMonthCount}" update="form" />
    </p:slider>
    </h:panelGrid>
    <ui:repeat var="month" value="#{backingBean.dateList}">
    <h:outputText value="#{month}">
    <f:convertDateTime pattern="MMM-yyyy" />
    </h:outputText>
    <br />
    </ui:repeat>
    </h:form>

更详细的解释:p:ajax -标签不仅需要event -属性,还需要被告知要做什么。所以定义监听器listener="#{backingBean.listenerMonthCount}" .为了让监听器知道新选择的 monthValue,必须将其传输到服务器 process="@form"用于将这种形式的所有值从客户端传输到服务器。 update="form"指示在处理完监听器后更新所有值。

<ui:repeat> - block 包含输出的渲染。它遍历 List<Date>并将每个项目分配给变量 month .这是用 f:convertDataTime 打印和格式化的它将 Java-DateFormatPattern 作为 pattern -属性。

在你的 Backing-Bean 中你本质上需要这个

private int monthCount = 0; // +getter/setter

private List<Date> dateList = new ArrayList<Date>(); // +getter/setter

public void listenerMonthCount(SlideEndEvent ae) {
dateList.clear(); // clear the list to remove entries from possible old runs
if (monthCount > 0) {
Date now = new Date();
dateList.add(now); // add first date
Calendar cal = Calendar.getInstance();
for (int i = 1; i < monthCount; i++) {
cal.setTime(dateList.get(dateList.size() - 1)); // get last date from list and set calendar
cal.add(Calendar.MONTH, 1);// add one month
dateList.add(cal.getTime()); // add calculated date
}
}
}

关于java - 在 JSF primefaces 中动态生成日期标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26732768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com