如何从JSPX输出<option selected =“true”>?</option>

时间:2009-11-19 07:21:04

标签: java html jspx

一些html标记将“给定”属性的“任意”值解释为“true” - &gt;我想到了选项标签。

我经常最终做这样的事情:

<c:choose>
   <c:when test="${isSelected}"/>
        <option selected="true">Opt1</option> 
    </c:when>
   <c:otherwise/>
        <option>Opt1</option> 
   </c:otherwise>
</c:choose>

我知道我可以声明一个自定义来封装这种行为,但 也变得相当丑陋,除非我在java中编码它。

有更聪明的方法吗?

4 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是使用自定义标记。

我喜欢JSP2X转换器采用的方法,在WEB-INF / tags文件夹中定义自定义标记,以便您执行此操作:

<jspx:element name="option">
    <c:if test="${selected}">
        <jspx:attribute name="selected">selected</jspx:attribute>
    </c:if>
    <jspx:body>Opt1</jspx:body>
</jspx:element>

更紧凑的方法可能是创建一个专门用于做出正确选项的选项的自定义标记,为所选属性取一个布尔值,如果是真的则发出selected =“selected”属性,否则。这会更紧凑:

<jspx:option selected="${selected}">Opt1</option>

答案 1 :(得分:0)

是的,更聪明的方法是写

<option selected="selected">Opt1</option>

因为那是mandated by XHTML

我知道这不是你真正要求的:-)我认为你的方式很好,或者你可以使用条件表达式:

<option ${isSelected?"selected=\"selected\"":""}>Opt1</option>

虽然不是更漂亮但它更短。

答案 2 :(得分:0)

对于<select><option selected="selected">问题,我决定不介意一点冗长,如果它只是一次性的详细...那么我在{{1}中创建了一个标记文档(.tagx)像这样:

/WEB-INF/tags/select.tagx

并像这样使用它:

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
    xmlns:c="http://java.sun.com/jsp/jstl/core">

    <jsp:directive.attribute name="id" required="true" />
    <jsp:directive.attribute name="name" required="true" />
    <jsp:directive.attribute name="options" required="true" />
    <jsp:directive.attribute name="selected" required="true" />

    <select id="${id}" name="${name}">
    <c:forEach var="opt" items="${options}">
        <c:choose>
        <c:when test="${opt == selected}"><option selected="selected">${opt}</option></c:when>
        <c:otherwise><option>${opt}</option></c:otherwise>
        </c:choose>
    </c:forEach>
    </select>
</jsp:root>
krosenvold,我不同意这是丑陋的......也许很讨厌,但我真的很高兴我没有为此编写任何代码。一旦定义了标记,JSPX就会变得更加整洁。此外,我根本不认为这有一个捷径。

答案 3 :(得分:0)

还有另一种解决方法。这有点像黑客,但是使用taglib或者选择复制标签的替代方法,我发现它非常适用。

您可以在jstl set标记内部构建标记作为值,如下所示:

<c:set var="mytag" value="&lt; option ${isSelected ? 'selected='\true\' : '' } &gt;">

然后,无论您想要哪个标签,只需输出如下:

${mytag}