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