Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Struts2高亮显示表中的行_Java_Jsp_Struts2 - Fatal编程技术网

Java 使用Struts2高亮显示表中的行

Java 使用Struts2高亮显示表中的行,java,jsp,struts2,Java,Jsp,Struts2,我正在预处理用户上传的一些数据,我想告诉他们是否有任何一行数据是无效的。我认为检查每一行是有意义的,如果有错误,将该行号添加到errorlines的hashset中,然后在输出时检查当前索引是否在hashset中,并突出显示该行 以下是相关的jsp: <table> <tr> <s:iterator value="prettyNames"> <th><s:prop

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

以下是相关的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或属性指令,属性测试不接受任何表达式”


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

您使用的方法不是有效的XHTML。您不能随意启动
标记。我会把它改写成

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


这就是我在Facelets中所做的,所以在struts中EL的工作方式可能也是一样的。我不确定我是否理解正在发生的疯狂现象。您看到此错误的原因是因为您试图在Struts2标记属性(在本例中为“test”)中计算标准JSP EL表达式。您需要使用OGNL表示法和S2标记,就像这样(假设lineErrors针对ValueStack进行解析):


当然,较短的方法是这样的,将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>


好的,谢谢,我不知道你可以在jsp中使用三元运算符。不过这与我的问题无关,因为将条件更改为,例如,
true
可以很好地工作。我也不理解
%{
的疯狂,我只是在学习这个:如果变量不是来自你的操作,则将其转换为变量。%{expression}将表达式表示为OGNL表达式,大多数struts2标记都假定是这种情况,不需要将表达式包装在%{}。其结果是,
OGNL行表达式不会在Struts2标记属性之外求值。请使用您正在尝试的内容更新您的源代码示例,我将发布一个更完整的示例。现在,您的示例显示"好的,Java Drinker的回答表明他们可以。我的问题中发布的是我目前正在尝试的JSP。在S2操作上有一个名为lineErrors的集合,其中有一个名为getLineErrors的getter?有一个非常好的示例,通过使用iter的status对象的奇数和偶数属性构建一个交替行的表ator:jonathan.cone的答案应该是正确的。但是您需要确保
public Set getLineErrors(){}
在action类中存在。
<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>