使用Struts2突出显示表中的行

时间:2011-09-07 19:48:32

标签: java jsp struts2

我正在预处理用户上传的一些数据,我想告诉他们数据的任何行是否无效。我认为检查每一行是有意义的,如果有错误将该行号添加到错误行的哈希集中,那么在输出时检查当前索引是否在哈希集中,并突出显示该行。

这是相关的jsp:

    <table>
        <tr>
            <s:iterator value="prettyNames">
                <th><s:property /></th>
            </s:iterator>
        </tr>
        <s:iterator value="importList" status="stat">
            <tr class="class="${lineErrors.contains(%{#stat.index}) ? 'highlight' : ''}"">
                <s:iterator>
                    <td><s:property /></td>
                </s:iterator>
            </tr>
        </s:iterator>
    </table>

高光设置将背景颜色设置为红色。但是我在Eclipse中收到一条警告说“test”不支持运行时  表达式“和页面返回500错误”,根据标记文件中的TLD或属性指令,属性测试不接受任何表达式“。

在表格中突出显示任意行的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您看到此错误的原因是您尝试评估Struts2标记属性中的标准JSP EL表达式,在本例中为“test”。你需要使用带有S2标签的OGNL表示法,如下所示(假设lineErrors针对ValueStack进行解析):

<table>
    <tr>
        <s:iterator value="prettyNames">
            <th><s:property /></th>
        </s:iterator>
    </tr>
    <s:iterator value="importList" status="stat">
        <s:if test="%{lineErrors.contains(#stat.index)}">
            <tr class="highlight">
                <s:iterator>
                    <td><s:property /></td>
                </s:iterator>
            </tr>
        </s:if>
        <s:else>
            <tr>
                <s:iterator>
                    <td><s:property /></td>
                </s:iterator>
            </tr>           
        </s:else>
    </s:iterator>
</table>

当然,较短的方法是这样的,你将S2属性标签嵌套在class属性中,但这样的可读性较差:

<table>
    <tr>
        <s:iterator value="prettyNames">
            <th><s:property /></th>
        </s:iterator>
    </tr>
    <s:iterator value="importList" status="stat">
        <tr class="<s:property value='%{lineErrors.contains(#stat.index) ? "highlight" : ""}' />">
            <s:iterator>
                <td><s:property /></td>
            </s:iterator>
        </tr>           
    </s:iterator>
</table>

答案 1 :(得分:0)

你拥有它的方式不是有效的XHTML。您无法在任何地方开始<tr>标记。我会把它重写为像

这样的东西
<tr class="${lineErrors.contains(%{#stat.index}) ? 'highlight' : ''}">
    <!--whatever-->
</tr>

这就是我在Facelets中所做的事情,所以EL可能在struts中以相同的方式工作。我不确定我理解发生的%{#...疯狂