2011-04-15 47 views
-1

嗨,请检查以下代码以供参考。如何在JSF中动态分配id到Datatable列

        <% 
             System.out.println("Here???????? 111111 :::::::::::::: "+request.getAttribute("COLUMNSIZE")); 

             if(request.getAttribute("COLUMNSIZE") != null){ 

              int columnSize = 0; 
              columnSize = Integer.parseInt(request.getAttribute("COLUMNSIZE").toString()); 
              System.out.println("Here 111111 :::::::::::::: "+columnSize); 

              for(int loop=0 ; loop < columnSize ; loop++){ 
            %> 

            <h:column> 
             <f:facet name="header" > 
              <h:outputText value="Field <%=loop%>"> 
              </h:outputText> 
             </f:facet> 
             <h:outputText value="Password" /> 
            </h:column> 

            <% 
             } 
             } 
            %> 

           </h:dataTable> 

现在我想的是,我要使用动态循环变量赋值给ID列...但scriplets是不允许的,我不能为它找到任何其他方式。

所以,如果你们有任何想法,那么请快速回复我。

+0

删除不必要的标签,你可以如不正确 – 2011-04-16 09:16:31

回答

0

如果我正确地读你的问题,你想动态改变你的dataTable的列数(我可能是错的)。

如果你是在icefaces或richfaces为什么你不使用ice:columnsrich:columns

+0

我在任的这不是我修改..中号使用纯JSF – 2011-04-15 11:03:58

+2

何必非要使用RichFaces/ICEfaces的标签?顺便说一句。一个舒适的方式来实现这一点是使用组件库(如rich-/ice-/primefaces) – 2011-04-15 11:15:42

0

脚本不应与JSF表达式混淆。下面的代码可以用来实现你已经尝试的东西,将逻辑放在后台bean看起来更具可读性。

<ui:repeat value="#{backingBean.headerNames}" var="header"> 
       <li> 
         <h:outputText value="#{header.field}" /> 
       </li> 
</ui:repeat> 

欲知详情,请通过JSF EL Documentation

+0

我试着说你说的方式,但它给出以下错误 - 语法[org.apache.catalina.core.ContainerBase。[jboss.web]。[localhost]。[/ timesascentadmin]。[jsp]] servlet jsp的Servlet.service()抛出异常 java.lang。 IllegalArgumentException:组件标识符的后续字符必须是字母,数字,下划线('_')或短划线(' - ')!但组件标识符包含“#” – 2011-04-18 10:26:41

+0

已编辑的答案可以实现相同的功能,但带有facelets。 – 2011-04-19 17:33:18

0

可能是其工作。

HtmlOutputText test = new HtmlOutputText(); 
test.setValue("test"); 

HtmlDataTable dataTable = new HtmlDataTable(); 
dataTable.getChildren().add(test);