Java 如何输出<;所选选项=";“真的”&燃气轮机;来自JSPX?

Java 如何输出<;所选选项=";“真的”&燃气轮机;来自JSPX?,java,html,jspx,Java,Html,Jspx,一些html标记将给定属性的“any”值解释为“true”->我想到了选项标记 我经常做这样的事情: <c:choose> <c:when test="${isSelected}"/> <option selected="true">Opt1</option> </c:when> <c:otherwise/> <option>Opt1</option&g

一些html标记将给定属性的“any”值解释为“true”->我想到了选项标记

我经常做这样的事情:

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

Opt1
Opt1
我知道我可以声明一个定制来封装这种行为,但这也会变得非常糟糕,除非我用java编写它


有更聪明的方法吗?

是的,更聪明的方法是写作

<option selected="selected">Opt1</option>
Opt1
因为这是最重要的

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

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

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

一种方法是使用自定义标记

我喜欢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>

挑选出来的
Opt1
更简洁的方法可能是专门为做正确事情的选项创建一个自定义标记,为所选属性获取一个布尔值,如果该值为真,则发出一个selected=“selected”属性,否则不会。这将更加紧凑:

<jspx:option selected="${selected}">Opt1</option>
Opt1
对于
问题,我决定我不介意有点冗长,如果只是一次冗长。。。因此,我在
/WEB-INF/tags/select.tagx
中创建了一个标记文档(.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>

${opt}
${opt}
并像这样使用它:

<?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>

...
...
...
最喜欢的日子:

克罗森沃德,我不同意这是丑陋的。。。也许很烦人,但我真的很高兴我没有为此编写任何代码。一旦定义了标记,JSPX就会变得更加整洁。除此之外,我不认为有捷径可走。

还有另一种方法可以绕过这个问题。这有点像黑客,但它是使用标记库或选择复制标记的位置的替代方法,我发现它非常有效

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

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

回答得好,可惜这里不行。什么版本的jspx可以为您实现这一点?你确定这不是jsp吗?对不起,它确实是jsp;我把他们搞错了。我想你的方式是唯一适用的;如果在这种情况下也不起作用。我不认为元素标记中允许使用条件句。这是后来规范中的变化吗?这些jspx:element不在规范中,它是JSP2X丢弃的自定义标记。只需在EL中使用三元运算符<代码>。不需要大量的
和代码复制。你真的试过吗?它不起作用-它是完全无效的XML。