5

一些 html 标签将给定属性的“任何”值解释为“真”-> 选项标签浮现在脑海中。

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

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

我知道我可以声明一个自定义来封装这种行为,但这也会变得非常难看,除非我用 java 编写代码。

有没有更聪明的方法来做到这一点?

4

4 回答 4

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>

一种更紧凑的方法可能是专门为执行正确操作的选项创建自定义标签,为所选属性获取布尔值,如果为 true,则发出 selected="selected" 属性,否则不发送。这会更紧凑一点:

<jspx:option selected="${selected}">Opt1</option>
于 2009-12-10T22:35:05.677 回答
0

还有另一种方法可以解决这个问题。这有点像 hack,但可以替代使用 taglib 或选择复制标签的位置,我发现效果很好。

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

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

然后,无论你想要那个标签,你只要像这样输出:

${mytag}
于 2011-04-15T16:17:39.187 回答
0

是的,更聪明的方法是写

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

因为那是XHTML 所要求的

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

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

它更短,但不一定更漂亮。

于 2009-11-19T08:41:33.987 回答
0

对于这个<select><option selected="selected">问题,我决定我不会介意有点冗长,如果它只是一次性冗长......所以我创建了一个标签文档(.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>

并像这样使用它:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<html xmlns="http://www.w3.org/1999/xhtml" version="2.1"
    ...
    xmlns:form="urn:jsptagdir:/WEB-INF/tags/">

    ...

    <head>
        ...
    </head>
    <body>
        <form method="POST" commandName="loginRequest" action="index_login.html">
            <fieldset id="loginFieldSet">
                ...

                <div>
                    <label for="day" path="day">Favourite day: </label>
                    <form:select id="day" name="day" selected="Saturday"
                        options="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday" />
                </div>
            </fieldset>
            <div>
            <input type="submit" tabindex="3" />
            <input type="reset" tabindex="4" />
            </div>
        </form>
    </body>
</html>

krosenvold,我不同意这很丑……也许很烦人,但我很高兴我不必为此编写任何代码。一旦定义了标记,您的 JSPX 就会变得更加整洁。此外,我根本不认为这有捷径。

于 2010-02-28T23:52:23.063 回答