Почему этот код скриптлета отображается на HTML-странице?

введите здесь описание изображения

Для кода, приведенного ниже, у меня это value=""> отображается на HTML-странице, как показано выше. Любые предложения о том, как это исправить?

<td class="data" align="left" valign="middle" width="80%">
    <input type="text" name="CMD" size="20" maxlength="16"
    <% if ( retrieveXMLCommand.cmdNumber.length() > 0 ){%>
        value="<%=retrieveXMLCommand.cmdNumber%>">&nbsp;
    <%}else{%>
        value="">&nbsp;
    <%}%>
</td>

HTML, как видно на странице, на которой он запущен

<td class="data" align="left" valign="middle" width="80%">

    <input type="text" name="CMD" size="20" maxlength="16">

    value="">&nbsp;

</td>

Я не знаю, связано ли это с разными версиями сервера. Этот код работает на сервере WAS 8.5, но когда он работает на WAS 6.1, value=""> не отображается на странице. Странный!

Обновление:

В приведенном выше коде не было ничего плохого. Это была проблема WebSphere, которая собирала старую версию файла. Восстановил и передислоцировал, и все было хорошо!


person Prince    schedule 27.05.2014    source источник
comment
Можете ли вы показать фактический вывод HTML, а не то, что браузер пытается с ним сделать?   -  person Brad    schedule 27.05.2014
comment
@Brad добавил код, как на странице.   -  person Prince    schedule 27.05.2014
comment
Существует > после maxlength=16. Это закрытие тега и обработка всего, что находится между ним и </td>, как текста.   -  person Katana314    schedule 27.05.2014


Ответы (4)


Я никогда не предлагаю вам использовать Scriptlet в JSP, вместо этого используйте Стандартная библиотека тегов JavaServer Pages, более простая в использовании и менее подверженная ошибкам.

Сначала попробуйте с JSTL:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:if test="${ retrieveXMLCommand.cmdNumber.length()  > 0}">
    <td class="data" align="left" valign="middle" width="80%">
         <input type="text" name="CMD" size="20" maxlength="16" value="${retrieveXMLCommand.cmdNumber}"/>
    </td>
</c:if>

В соответствии с вашим кодом сначала вычислите значение, а затем, наконец, используйте его в атрибуте value, чтобы сделать его более понятным.

<%
    String value = "";
    if (retrieveXMLCommand.cmdNumber.length() > 0) {
        value = retrieveXMLCommand.cmdNumber;
    }
%>

<td class="data" align="left" valign="middle" width="80%">
     <input type="text" name="CMD" size="20" maxlength="16" value="<%=value%>"/>
</td>
person Braj    schedule 27.05.2014
comment
Брэдж, то, что я рассматриваю, является устаревшим кодом, и это около 2000 строк похожего кода, поэтому я не думаю, что рефакторинг осуществим до тех пор, пока он не станет абсолютно необходимым. Но я попытаюсь изменить его в соответствии с предложенным вами подходом. - person Prince; 27.05.2014
comment
как насчет второго варианта? - person Braj; 27.05.2014
comment
Да, я изменяю в соответствии с этим. Я дам вам знать после того, как отредактирую и протестирую его. :) - person Prince; 27.05.2014
comment
опять вы смешиваете html со скриптом. - person Braj; 27.05.2014
comment
Да, я просто пытаюсь изменить минимально. Я подумал, что, возможно, назначив value раньше, я смогу удалить условие else, которое по некоторым причинам отображается неправильно. - person Prince; 27.05.2014
comment
Что ж, я попробовал ваш подход JSTL. Это не помогло! Я все еще вижу value=""> на странице. - person Prince; 27.05.2014
comment
По некоторым причинам страница не обновляется на сервере... есть идеи, почему?? - person Prince; 27.05.2014
comment
Откуда я знаю все без исключения подробности? - person Braj; 27.05.2014
comment
Что ж, исключений нет. Просто старая страница отображается..Я перезапустил jvm..посмотрим.. - person Prince; 27.05.2014
comment
Хорошо, есть эта ошибка тега: JSPG0068E: Unmatched tag found while parsing jsp [c:if]. У меня есть этот код в файле html, который включается в файл jsp. Можете ли вы сказать мне, где определить taglib? - person Prince; 28.05.2014
comment
Включили ли вы <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> в свой файл JSP. - person Braj; 28.05.2014
comment
Да. Нужно ли включать taglib в файл HTML? Или определить это в web.xml? - person Prince; 28.05.2014
comment
вам нужно jstl.jar поместить его в папку WEB-INF/lib - person Braj; 28.05.2014
comment
Прочитайте здесь Как мне использовать JSTL в моих JSP? - person Braj; 28.05.2014
comment
У меня уже есть jstl-1.0.2.jar!! Не могу получить доступ к этой странице в моей компании.. Что еще мне нужно сделать? - person Prince; 28.05.2014
comment
Ничего другого не требует. Просто импорт в JSP. Если вы все еще сталкиваетесь с проблемой, пожалуйста, следуйте инструкциям. Я поделюсь с вами еще немного. - person Braj; 28.05.2014
comment
Прочитайте здесь Настройка JSTL для JSP 2.x и здесь Установка поддержки JSTL - person Braj; 28.05.2014
comment
Простите одну вещь, которую я пропустил, чтобы сказать вам. Вам потребуется несколько TLDS и поместите их непосредственно в папку WEB-INF/tld. Загрузите его по указанным выше ссылкам. - person Braj; 28.05.2014
comment
О боже, это не сработало, поэтому я все удалил и вернулся к исходному коду. Я понял, что это проблема кэша WebSphere. Переделал и все стало хорошо. Я не могу отметить это как ответ, но я поставлю +1. Спасибо что выручили меня.. - person Prince; 28.05.2014

Вы можете использовать условный оператор, как указано ниже.

<input type="text" name="CMD" size="20" maxlength="16" 
    value="<% = retrieveXMLCommand.cmdNumber.length() > 0 ? retrieveXMLCommand.cmdNumber:"" %>" />

надеюсь, должно сработать

person user3662273    schedule 27.05.2014
comment
точка с запятой не допускается в конце присваивания Скриплет <%= - person Braj; 27.05.2014

У вас есть что-то, что автоматически закрывает ваш входной тег. Обратите внимание, что вы распечатали <input type="text" name="CMD" size="20" maxlength="16" в одной строке, а затем пытаетесь напечатать остальные в операторе if, одну другую строку. Что-то закрывает его раньше тебя. Что, я понятия не имею. Но вы можете попробовать напечатать все это одной строкой.

<td class="data" align="left" valign="middle" width="80%">
<%
   String value = "";
   if ( retrieveXMLCommand.cmdNumber.length() > 0 )
   {
      value = "" + retrieveXMLCommand.cmdNumber;
   }
   out.print("<input type='text' name='CMD' size='20' maxlength='16' value='" + value + "' />&nbsp;");
%>
</td>
person developerwjk    schedule 27.05.2014

В этом случае в приведенном выше коде не было ничего плохого. Это была проблема WebSphere, которая подхватывала старую версию файла. Я восстановил и передислоцировал, и все это работало нормально!

person Prince    schedule 22.07.2016