OpenFaces 3 и IE6 (действия с кнопками)

#java #jsf #xhtml #jsf-2 #openfaces

#java #jsf #xhtml #jsf-2 #openfaces

Вопрос:

Я использую OpenFaces и должен быть совместим с IE6. До сих пор все работает более или менее без проблем.

Однако я столкнулся с проблемой….

У меня есть несколько кнопок внутри формы. Сохранять, добавлять, экспортировать и удалять. Нажатие на Экспорт отлично работает с Firefox и IE8, вызывается exportToCsv() в определенном компоненте, поэтому это должно быть поведение браузера. Нажатие на экспорт с помощью IE6 вызывает add() в компоненте вместо exportToCsv().

Есть идеи?

Заранее благодарю вас.

Комментарии:

1. все еще поддерживаете IE6? Примите мои глубокие соболезнования. Я надеюсь, вы берете за это дополнительную плату.

Ответ №1:

<o:commandButton> Компонент отображает <button> тег вместо <input> только в том случае, если вы указываете отображаемое содержимое кнопки между <o:commandButton> и </o:commandButton> . Если вам просто нужно отобразить обычный текст, то вам не обязательно использовать этот подход, и вы можете использовать обычный value атрибут, который приведет к отображению <input> тега вместо <button> , т.е. использовать:

 <o:commandButton value="Submit"... /> 
  

вместо

 <o:commandButton ...>Submit</o:commandButton>
  

Дело в том, что последняя форма позволяет размещать произвольный HTML-код и, следовательно, требует <button> тега.

Комментарии:

1. Я действительно указывал содержимое между тегами, и они мне действительно нужны… Однако знаете ли вы обходной путь? Как мне использовать O $.ajax.request для получения файла обратно и открыть файл с помощью window.open (…)? У вас есть пример? Спасибо.

2. Обходным путем является переключение кнопки в режим Ajax путем указания ее атрибутов render / execute, если использование Ajax подходит в вашем случае. Мы также попытаемся исправить это в самом компоненте (просто отследите статус OF-112 )

Ответ №2:

В IE6 есть ошибки с <button> элементом. Он поддерживает это, но неправильно отправляет значение.

Решение 1: Используйте <input type='button'> вместо этого. Это, вероятно, наиболее очевидное решение, но в зависимости от дизайна вашей страницы это может быть проблемой, потому что оно не поддерживает вложенные элементы так, <button> как это делает.

Решение 2. Используйте <button> , но запускайте действия через Javascript (или, что более вероятно, jQuery), а не отправляйте форму напрямую, и используйте такой метод, как скрытое поле, которое заполняется JS в зависимости от того, какая кнопка нажата, чтобы гарантировать отправку правильных сведений.

Ответ №3:

Ответ №4:

Обходной путь при использовании OpenFaces

 <o:outputLink styleClass="linkButton" ...>

.linkButton {
    display: block;
    float: left;
    margin: 0 0 0 0;
    background-color: #f5f5f5;
    border: 1px solid #dedede;
    border-top: 1px solid #eee;
    border-left: 1px solid #eee;
    font-family: "Lucida Grande", Tahoma, Arial, Verdana, sans-serif;
    text-decoration: none;
    font-weight: bold;
    color: #565656;
    cursor: pointer;
    padding: 2px 2px 2px 2px; /* Links */
}
  

Модифицированный CSS из этого источника: