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