jsf动态页面

所谓动态页面就是指页面上的字段是不固定的,比如常见的动态参数,根据不同的情况同一个页面会显示不同的字段。

一般来说是将动态参数以key value的形式存储在数据库中,动态参数由两部分组成,1)动态参数定义,即指定情况下应该有哪些参数,2)动态参数值存储,即将用户输入的value与key对应起来存储和显示。

 

动态参数定义需要code,name,可选择列表

public class ReportParameterDefinition

    private String code;

    private String name;//用来显示

//Eg: 1;Int., 2;Dom, 3;Both

    private String optionItems;

 

动态参数值

public class ReportParameter

    private String code;//与ReportParameterDefinition的code对应

    private String value;//用户输入的值

 

页面上通过 c标签来动态生成jsf标签。

c标签本质上不是jsf标签,他不会生成对应的jsf组件,但他可以用来控制jsf组件的生成,c:forEach里面的jsf组件相当于直接在页面上写了多遍jsf组件,不同于ui:Repeat,ui:Repeat本身是jsf组件,他里面的其他jsf组件只有一份,不会根据循环的遍数生成多个jsf组件。

c标签被faceslet重新定义,用来动态生成jsf组件,每次请求的第6阶段会首先执行c标签来更新jsf组件树中的组件

<c:if
  test="#{report.globalReport.reportDefinition.parameterDefinitions !=null}">
  <c:forEach
   items="#{report.globalReport.reportDefinition.parameterDefinitions}"
   var="row1">
   <h:panelGroup>
    <h:outputText value="#{row1.name}" />
   </h:panelGroup>
   <h:panelGroup>
     <c:if test="#{!row1.options}">
      <h:inputText value="#{report.reportParameterMap[row1.code].valueName}"
       label="#{row1.name}" required="true">
       <a4j:support event="onblur" ajaxSingle="true"
        reRender="param_#{row1.code}_Decorate" />
      </h:inputText>
     </c:if>
     <c:if test="#{row1.options}">
      <rich:comboBox
       value="#{report.reportParameterMap[row1.code].value}"
       label="#{row1.name}" enableManualInput="false" required="true">
       <c:forEach items="#{row1.optionItems}" var="row2">
        <f:selectItem itemLabel="#{row2.key}" itemValue="#{row2.value}" />
       </c:forEach>
      </rich:comboBox>
     </c:if> 
   </h:panelGroup>

  </c:forEach>
 </c:if>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值