如何选择由JSP 2.0标记文件的特定实例生成的元素

时间:2012-10-16 15:01:56

标签: javascript jquery jsp jstl jsp-tags

简短版本:我如何(使用JQuery或其他选择器)选择由JSP 2.0标记文件的此实例创建的HTML元素,每个页面可以多次使用?

长版:

我有一个JSP 2.0标记文件,如下所示:

<%@ tag body-content="empty" import="org.myapp.model.Question" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ attribute name="question" required="true" type="org.myapp.model.Question" %>

<div class='singleChoice'>
   <c:forEach items="${question.questionOptions}" var="option">
       <!-- display options... -->
   </c:forEach>
</div>

此标记可在给定页面上多次使用。如果question.questionOptions的大小小于3,我想在此标记生成的'singleChoice'div中添加一个额外的CSS类('compact')。我想在tagfile中添加逻辑(JavaScript,其他JSTL,无论什么是必要的)来检查questionOptions的长度,并在必要时将类添加到div。

我知道我可以在标记文件中添加一个脚本标记,如下所示:

<c:if test="${fn:length(question.questionOptions) < 3}"> 
    <script type="text/javascript">
    $(document).ready(function() {
        $('div .singleChoice').addClass('compact');
    });
    </script>
</c:if>

但由于在整个文档准备就绪时执行,并且标记可能在页面中多次出现,它会将“紧凑”类应用于页面上的所有'singleChoice'div,如果它们中的任何一个满足条件应用它。当我不知道ID时(如果我不想设置ID),如何在tagfile中指定 this div?

1 个答案:

答案 0 :(得分:1)

如果${question.questionOptions}小于3,是否要添加“紧凑”类?如果是,我建议的解决方案是添加一个条件,用div =“singleChoice compact”设置div。

<c:set var="divClass" value="singleChoice" />
<c:if test="${fn:length(question.questionOptions) < 3}">
   <c:set var="divClass">singleChoice compact</c:set>
</c:if>
<div class='${divClass}'>
    <c:forEach items="${question.questionOptions}" var="option">
        <!-- display options... -->
    </c:forEach>
</div>

这个解决方案没有经过测试,但如果我理解你的问题是正确的,那么逻辑是存在的。