【问题标题】:Represent a boolean value in Primefaces DataTable表示 Primefaces DataTable 中的布尔值
【发布时间】:2012-09-19 05:48:51
【问题描述】:

所以我试图将对象值从 bean 传递到 primefaces 数据表(目前使用 primefaces 3.4),但是我面临两个问题。

1. 我似乎找不到任何方法在数据表的列中显示(或表示)布尔值。每次我尝试这样做时,表都会返回完全为空(即使没有布尔列,其他列也填充了来自 bean 的数据)。

2. 另一个更大的问题(我认为与 java 的关系比 primefaces 更多)是我目前从 Siebels CRM ONDemand 云解决方案中获得了 26 个不同的对象,每个对象都包含自己的数据类型和属性值。我一生都无法弄清楚如何根据特定对象显示的下拉选择来动态显示primefaces数据表中的对象字段。到目前为止,我刚刚设法将其中一个对象的一些字段显示为一种原型,但我遇到了布尔值显示的问题,这也是一场噩梦。

有人有类似的经历吗?或建议?我已经为此困惑了两个多星期了,我快疯了!

如果需要,我可以提供代码示例或其他详细信息:)

非常感谢,非常感谢任何帮助!

雷吉

HTML代码:

<p:panel header ="Source Environment" style="margin-bottom:5px;">
    <p:dataTable draggableColumns="true" id="tableFieldSet1" value="#{ODComBean.fields}" var="tableFieldSet1" rowKey="#{ODComBean.fields}" selectionMode ="multiple" style="font-family:sans-serif; width:max-content;">
        <p:panel header="OD Object Selection" style="margin-bottom:5px;">
            <h:panelGrid columns="2" cellpadding="5">
                <p:selectOneMenu immediate ="true" id="pickList" value="#{ODComBean.fieldSetData}" effect="fade"  style="font-size: 12px; font-family:sans-serif;" >
                    <f:selectItems value="#{ODComBean.fieldSet}"  itemLabel="#{fieldSet.objectName}" var="fieldSet"/>
                    <p:ajax event="change" update="@form" />
                </p:selectOneMenu>
            </h:panelGrid>
        </p:panel> 
        <p:panel header ="Source Environment" style="margin-bottom:5px;">          
            <p:dataTable draggableColumns="true" id="tableFieldSet1" value="#{ODComBean.fields}" var="tableFieldSet1" rowKey="#{ODComBean.fields}" selectionMode ="multiple" style="font-family:sans-serif; width:max-content;">     
                 <p:column headerText="Type"  styleClass="singleLine" style="height: 10px; font-size: 8pt;"> 
                     <h:outputText value="#{tableFieldSet1.fieldType}"/>
                 </p:column>
                  <p:column headerText="Required">
                         <p:graphicImage value="/resources/images/tick.png" rendered="#{tableFieldSet1.readOnly}"/>
                         <p:graphicImage value="/resources/images/red-cross.png" rendered="#{not tableFieldSet1.readOnly}"/>
                 </p:column>
                 <p:column headerText="Name"  styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.name}"/>
                 </p:column>
                 <p:column headerText ="Display Name" styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.displayName}"/>
                 </p:column>
                 <p:column headerText="Default Value"   styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.defaultValue}"/>
                 </p:column>
                 <p:column headerText="Generic Integration Tag" styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.genericIntegrationTag}"/>
                 </p:column>
                 <p:column headerText ="Integration Tag"  styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                      <h:outputText value="#{tableFieldSet1.integrationTag}"/>
                 </p:column>
                 <p:column headerText ="Translations" styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.listOfFieldTranslations}"/>
                 </p:column>
                 <p:column headerText ="Validation Error"  styleClass="singleLine" style="height: 10px; font-size: 8pt;">
                     <h:outputText value="#{tableFieldSet1.validationErrorMsg}"/>
                 </p:column>
                     <!-- When I add the next Column it will only show data for the first line, and display a <div half tag in the last column... strange... !-->

    </p:dataTable>
</p:panel>

【问题讨论】:

  • 我无法想象布尔属性如何以这种方式形成问题。 SSCCE 将有助于更好地理解具体问题。
  • 嗨,Balus,不幸的是,我不知道是否可以提供 SSCCE,因为您需要 WSDL(Web 服务描述语言文件)来获取对象,或者至少不是可编译的一。但是,我可以复制我的 xhtml 的 sn-p 和相关的支持 bean,也许您可​​以发现我犯的某种错误?如果可能的话,感谢您的回复;)
  • 如果你不能自己存根,那么它很可能不是 JSF 特定的问题。
  • 我认为更重要的是我不知道如何在列中放置一个复选框并使用布尔值变量来定义它是否被勾选(真或假)。目前我试图在 h:outputText 标记中显示布尔值,我认为这可能是不正确的:/
  • 似乎在渲染过程中抛出了异常,可能是由于语法错误或标记中的代码不完整。例如,您是否查看过服务器日志?应在此处记录异常。否则将响应缓冲区大小增加javax.faces.FACELETS_BUFFER_SIZE 上下文参数,以便异常将在错误页面中完整显示。

标签: jsf primefaces datatable boolean


【解决方案1】:

如果您想使用 h:outputText,您可以将其转换器设置为您实现的内容,并在该转换器内部决定显示值。 否则,如果您喜欢根据值查看图标, 你可以这样做:

<p:column headerText="My Boolean Value">
   <p:graphicImage value="/resources/images/tick.png" rendered="#{MODEL.boolean}"/>
   <p:graphicImage value="/resources/images/red-cross.png"  rendered="#{not MODEL.boolean}"/>
</p:column>

我希望这会有所帮助:)

【讨论】:

  • 我很欣赏侯赛因的回答,我现在就实现它,看看它是如何工作的!再次感谢 m8
  • 嗨 Hossein,我尝试实现这个解决方案,我确信它会起作用,但是当我放置任何使用来自 bean 的布尔值的列时,我不断遇到奇怪的情况。该表将正确显示,直到第一次出现布尔表示,而不是在列中显示“
  • 嗨,Reggie,我不知道那里有什么问题,我正在使用我在项目中告诉过你很多的解决方案,我完全没有问题!可以发你的代码吗?这可能有助于识别问题
  • 由于某种原因,堆栈溢出使得复制代码并发布它变得超级复杂。因此,如果您有某个地方我可以发送它或者您希望将其上传到某个地方,我可以这样做:D 需要一位火箭科学家来弄清楚在此表单上发布所需的语法...
  • 你可以邮寄给我,hossein.arbaboon@gmail.com
【解决方案2】:

Output panellayout 设置为 inline 会生成带有您提供的样式类的 标记。

例如,您可以使用框架提供的jquery-ui icons。像这样:

<p:outputPanel layout="inline" styleClass="ui-icon ui-icon-circle-check" rendered="#{project.inBudget}" />
<p:outputPanel layout="inline" styleClass="ui-icon ui-icon-circle-close" rendered="#{!project.inBudget}" />

【讨论】:

    【解决方案3】:

    您可以简单地为true空字符串 使用复选标记 符号,或为false 使用x 符号。

    <p:column headerText="Required" style="text-align: center">
        <h:outputText value="#{tableFieldSet1.readOnly ? '✓' : ''}"/>
    </p:column>
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签