JSTL в теге Struts

Я должен проверить условие в теге struts и включить или отключить поле следующим образом:

<c:when test="${multipleCase=='true'}">
    <html:text property="${row.dataElementJavaName}" 
               maxlength="${row.dataElementSize}" 
               size="60" 
               value="${row.dataElementValue}"
               onkeyup="javascript:enableSave()" 
               onkeypress="return letternumber(event,'c')" 
               <c:if test="${model.readonlyStatus=='true'}">disabled</c:if> 
    />        
</c:when>

Когда я компилирую, я получаю следующую ошибку:

Attribute: <c:if is not a valid attribute name
Encountered end tag </c:if> without corresponding start tag.

Если я использую то же самое в поле ввода HTML, он отлично работает. Каков другой вариант? любые входы?


person JNPW    schedule 12.12.2012    source источник
comment
Какую версию struts и какую версию jstl вы используете? Также какую версию API сервлета вы используете?   -  person nwaltham    schedule 12.12.2012
comment
вы хотите установить атрибут disabled = true при каком-то условии?   -  person invariant    schedule 13.12.2012


Ответы (2)


Вы не можете просто поместить тег <c:if> в объявление тега <html:text>. Он поддерживает только такие атрибуты, как определено здесь.

Вот почему возникает ошибка, жалующаяся на то, что атрибут <c:if недействителен. Он обращается с ним так, как будто это другой атрибут, которого не существует. Поэтому я думаю, что то, что вы пытаетесь сделать в своем коде, просто невозможно.

Как вы упомянули, включение <c:if> в HTML будет работать нормально. Я ожидал, что это будет выглядеть примерно так:

...
<input type="text" name="${row.dataElementJavaName}" 
           maxlength="${row.dataElementSize}" 
           size="60" 
           value="${row.dataElementValue}"
           onkeyup="javascript:enableSave()" 
           onkeypress="return letternumber(event,'c')" 
           <c:if test="${model.readonlyStatus=='true'}">disabled</c:if> 
/>  
...
person Jonathan    schedule 12.12.2012

Переместите <c:if> за пределы <html:text> следующим образом:

<c:when test="${multipleCase=='true'}">
  <c:if test="${model.readonlyStatus=='true'}">
    <html:text property="${row.dataElementJavaName}" 
               maxlength="${row.dataElementSize}" 
               size="60" 
               value="${row.dataElementValue}"
               onkeyup="javascript:enableSave()" 
               onkeypress="return letternumber(event,'c')" 
               disabled
    />   
  </c:if>     
  <c:if test="${model.readonlyStatus!='true'}">
    <html:text property="${row.dataElementJavaName}" 
               maxlength="${row.dataElementSize}" 
               size="60" 
               value="${row.dataElementValue}"
               onkeyup="javascript:enableSave()" 
               onkeypress="return letternumber(event,'c')" 
    />   
  </c:if>     
</c:when>
person GriffeyDog    schedule 12.12.2012