td的class属性中有多个条件

问题描述 投票:-1回答:2

我有一个具有String属性的对象,该属性可能有四个可能的值,对于每个值,我想将不同的css类放入单元格。我想知道是否有办法在这里写复合条件:

<ui:repeat value="#{row.info}" var="wui" >
            <td class="#{wui.status eq 'In execution'? 'inexec' : '' }"> 
            <!--<td id="wuitd" onLoad="classfunction()" >--> 
                <h:outputText value="#{wui.status}" />
                <h:outputText value="#{wui.remainingEffort} effort units" />
           </td>
</ui:repeat>

我尝试编写一个javascript函数,但我不确定它是否正确,我认为函数调用是错误的:

<td id="wuitd" onLoad="classfunction()" >
        <h:outputText value="#{wui.status}" />
</td>

<script>
    function classfunction(){

        char status = document.getElementById("wuistatus").value;
        switch(status) {
            case 'In execution':
                document.getElementById("wuitd").style.parentRule('inexec');
                break;
            case 'Ready for execution':
                document.getElementById("wuitd").style.parentRule('ready');
                break;
            case 'Finished':
                document.getElementById("wuitd").style.parentRule('finished');
                break;
            case 'Not ready':
                document.getElementById("wuitd").style.parentRule('notExec');
                break;
            default:
                code block
        }
    }

</script>
javascript html multiple-conditions
2个回答
1
投票

你可以找到你需要了解的关于问题的JS部分的大部分或全部内容here ...我不知道“wui”部分是关于什么的。

进一步参考(您可以更好地使用Google并添加一些额外的关键字来匹配您的环境):

我在这种情况下的第一个想法几乎是使用“嘿,我知道,我可以使用jQuery!” ......我知道,“现在我有两个问题”,但确实有效:o)

无论如何,我假设你在这里加载了某种JS框架。如果是这样,并且它不是jQuery,请找出它的“页面加载”机制是什么。除非您完全确定将在您的应用程序中使用哪些浏览器,否则您不希望“手动”了解如何执行此操作。


0
投票

看起来您正在使用JSP / JSF(或至少使用EL表达式的东西)。在将来的问题中,最好准确指定您正在使用的内容(通常通过标签)。根据EL的文档,您可以使用哈希查找。因此,如果您可以在某个地方定义以下内容,则可以在模板中访问:

statusToClass = {
  "In execution": "inexec",
  ... // define your other value -> class translations
}

你应该能够:

<td class="#{statusToClass[wui.status]}"> 
  <h:outputText value="#{wui.status}" />
</td>

我承认我不知道EL,所以在哪里或如何定义statusToClass尚不清楚。但是,此方法可以很好地避免支持对象/哈希的其他语言的多个条件。只要你可以依靠wui.status总是具有可预测的价值。这是因为您在查找时没有编程控制,也没有机会回退到默认值。在JavaScript中,您可以轻松添加回退,但不能确定EL会支持这种回退。

statusToClass[wui.status]||'default'

看起来你可以定义可以被EL3访问的方法(作为Bean的一部分) - https://docs.oracle.com/javaee/7/tutorial/jsf-el003.htm - 所以这可能是你可以研究的另一条路径(而不是JavaScript方法,看起来它可能容易出现几个问题,即onLoad.value - 除非您正在使用的Java上下文通过扩展支持这些)。通过它的声音,你越多地融入EL期望的工作方式,就越容易 - 特别是当使用像ui:repeat这样的其他惯例时。

© www.soinside.com 2019 - 2024. All rights reserved.