使用JSP文档(JSPX)有条件地设置元素的属性

在HTML表单中,按钮可以通过定义它们的“禁用”属性来禁用,具有任何值:

<button name="btn1" disabled="disabled">Hello</button>

如果要启用按钮,则该属性不应该存在,因为没有定义的值可以将disabled属性设置为启用该按钮。

当我想在使用JSP文档(jspx)时启用/禁用按钮时,这会导致我遇到问题。 由于JSP文档必须是格式良好的XML文档,因此我无法看到有条件地包含此属性的任何方式,因为下面的内容不合法:

<button name="btn1" <%= (isDisabled) ? "disabled" : "" %/> >Hello</button>

虽然我可以使用JSTL if标签复制标签两次以获得所需的效果,但在我的具体情况中,我在按钮上声明了超过15个属性(大量AJAX的JavaScript事件处理程序属性),因此复制标签会使JSP很凌乱。

我怎样才能解决这个问题,而不牺牲JSP的可读性? 是否有任何自定义标签可以通过操作输出DOM向父级添加属性?


我使用具有动态属性的自定义JSP标记。 你这样使用它:

<util:element elementName="button" name="btn1" disabled="$(isDisabled ? 'disabled' : '')"/>

基本上,这个标签所做的是使用elementName生成一个XML元素,并将所有属性放在标签中,但跳过空标签。

标签本身很容易实现,我的实现只有44行。


您可以使用<jsp:text>标记来使用有效的XML来解决此问题:

<jsp:text><![CDATA[<button name="btn1"]]></jsp:text>
    <c:if test="${isDisabled}"> disabled="disabled"</c:if>
    >
    Hello!
<jsp:text><![CDATA[</button>]]></jsp:text>

这显然比其他一些解决方案更加冗长。 但它完全独立 :不需要自定义标签。 而且,它可以轻松扩展到您需要的任何属性。


@alex使用三元运算符的很好的解决方案。 我添加了一些我的例子,感谢你,我只是改变了条件的结果,如果属实,写入属性,否则不写任何东西

填充列表并选择使用的值,避免c:if

<select id="selectLang" name="selectLang" >
<c:forEach var="language" items="${alLanguages}" >
    <option value="${language.id}" ${language.code == usedLanguage ? 'selected' : ''} >${language.description}</option>
</c:forEach>

在开始时检查单选按钮以避免c:if:

<input type="radio" id="id0" value="0" name="radio" ${modelVar == 0 ? 'checked' : ''} />
<input type="radio" id="id1" value="1" name="radio" ${modelVar == 1 ? 'checked' : ''} />
<input type="radio" id="id2" value="2" name="radio" ${modelVar == 2 ? 'checked' : ''} />
链接地址: http://www.djcxy.com/p/76581.html

上一篇: Conditionally set an attribute on an element with JSP Documents (JSPX)

下一篇: Does Sitemesh work with Gaelyk ? Does anybody have a working guide?