문제

HTML 양식에서는 값으로 "비활성화 된"속성을 정의하여 버튼을 비활성화 할 수 있습니다.

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

버튼을 활성화하려면 비활성화 된 속성을 설정할 수있는 정의 된 값이 없으므로 버튼을 활성화 할 수있는 정의 값이 없으므로 속성이 존재하지 않아야합니다.

이로 인해 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 3 배 운영자를 사용하는 훌륭한 솔루션. 나는 당신 덕분에 조건의 결과를 변경 한 내 예제 중 일부를 추가합니다. 사실이라면 속성을 작성합니다. 그렇지 않으면 아무것도 쓰지 않습니다.

목록을 채우고 사용 된 값을 선택하려면 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' : ''} />

나는 이것에 대한 마지막 게시물 이후로 어느 정도 통과 된 것 같지만, 나는 똑같은 문제에 반대했다. <select><option selected="selected"> 태그, 즉 선택한 옵션을 동적으로 선언합니다. 그 것을 해결하기 위해 나는 맞춤형 tagx를 만들었습니다. 세부 사항을 다른 세부 사항에 게시했습니다 여기서 답하십시오

나는 좋은 지름길이 없다는 결론에 도달했다. EL 및 JSP 표현식은 XML 요소 속성 (및 신체 함량) 내에 만 존재할 수 있습니다. 따라서 다음을 수행해야합니다.

<c:choose>
    <c:when test="${isDisabled}"><button name="btn1" disabled="disabled">Hello</button></c:when>
    <c:otherwise><button name="btn1">Hello</button></c:otherwise>
</c:choose>

Scriptlet 표기법 사용은 JSP 문서 (.jspx)에서 작동하지 않습니다.

자동에 대해 읽습니다 JSP에서 JSPX 변환기로 나는 만났다 <jsp:element> 그리고 <jsp:attribute> 태그. 내가 올바르게 이해한다면 당신은

<jsp:element name="button">
  <jsp:attribute name="someAttribute">value</jsp:attribute>
</jsp:element>

JSP 엔진 출력이 있습니다

<button someAttribute="value"/>

또는 그런 것. 위의 페이지에서 지적 된 유일한 문제는 조건부 구성과 잘 어울리지 않는 것입니다. 컨버터의 저자는 일부 도우미 태그를 만드는 데 도움이되었으며, 이는 소스 코드를 다운로드 할 수 있습니다. 도움이되기를 바랍니다.

태그 라이브러리 (.TAGX)를 만든 다음 스크립트 렛 태그를 사용하십시오.

보다 http://code.google.com/p/jatl/wiki/jspexample

<?xml version="1.0" encoding="UTF-8" ?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1">
<jsp:directive.page import="com.googlecode.jatl.Html"/>
<jsp:directive.page import="com.evocatus.product.data.AttributeValue"/>
<jsp:directive.page import="com.evocatus.domain.Product"/>

<jsp:scriptlet>
//<![CDATA[
    final Product p = (Product) request.getAttribute("product");
        new Html(out) {{
           for (AttributeValue v : p.summaryAttributeValues()) {
                   p();
                        strong().text(v.getLabel()).end();
                        text(": " + v.getValue());
                   endAll();
           }
        }};
//]]>
</jsp:scriptlet>

</jsp:root>

네, 이것은 속임수입니다 ... 그러나 그것은 일을 끝냅니다. 또한 이런 식으로 나무 구조에 대해 정말로 불쾌한 복잡한 재귀를 할 수 있습니다.

또한 블로그와 GIST.github에 여러 개의 Tagx 라이브러리를 사용하는 다른 솔루션을 게시했습니다. http://adamgent.com/post/8083703288/conditionally-set-an-attrube-on-an-element-with-jspx

< %= blah %> 구문은 JSP 문서에 필요한 합법적 인 XML이 아닙니다. 두 가지 옵션이 있습니다.

  1. 교체 <%= (isdisabled)? "비활성화": "" %>u003Cjsp.expression> (isdisabled)? "장애가 있는" : ""u003C/jsp.expression>
  2. 코어 taglib 및 el을 사용하십시오 (isdisabled가 페이지 범위에 넣어야 함) :
<c:choose>
  <c:when test="${isDisabled}">"disabled"</c:when>
  <c:otherwise>""</c:otherwise>
</c:choose>

도움이되기를 바랍니다 :)

나는 방금 같은 문제로 어려움을 겪고 있습니다. 나는 사용을 시도했다 <jsp:attribute name="disabled"/> 내부에 <c:if>, 그러나 컴파일러는 비활성화 속성을 c:if 실패하는 요소. 그러나 나는 이것이 작동한다는 것을 발견했다 (stripes:submit 줄무늬로 제출되는 유형의 버튼을 만드는 요소) :

<stripes:submit name="process" value="Hello">
   <jsp:attribute name="disabled">
       <c:if test="${x == 0}">disabled</disabled>
   </jsp:attribute>
</stripes:submit>

그것은 것 같습니다 jsp:attribute 신체에 공백 만 포함되어 있으면 속성을 전혀 만들지 않으므로 disabled="disabled" 아니면 전혀 아무것도 없습니다.

이것은 일종의 taglib를 사용하여 버튼을 생성하는 경우에만 작동하며 태그 요소는 비활성화 된 속성 (기본 HTML 요소로 전달)을 지원해야합니다. 당신은 사용할 수 없습니다 jsp:attribute 원시 HTML 요소에 속성을 추가합니다.

나는 실제로 JSP를 사용하지 않습니다 (그리고 한 번 대답 한 다음 "유효한 XML에 의한 필수"를 이해했을 때 삭제했습니다). 내가 생각해 낼 수있는 가장 깨끗한 것은 다음과 같습니다.

<% if (isDisabled) { %>
  <button name="btn1" disabled="disabled">Hello</button>
<% } else { %>
  <button name="btn1">Hello</button>
<% } %>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top