Подтвердить что ты не робот

Как сделать кнопку изображения в JSF

Я хочу иметь компонент, который выглядит как кнопка, но вместо текста он должен содержать изображение. Поскольку стандартная кнопка не предлагает эту функцию, я попытался использовать <h:commandLink>:

<h:commandLink action="#{some_action}">
    <p:panel styleClass="some_style">
        <h:graphicImage value="#{some_image}">
    </p:panel>
</h:commandLink>

Это не работает. <h:commandLink> преобразуется в тег <a>, а <p:panel> - в <div>. <a> -tags не может содержать <div> -tags, поэтому <div> -tag автоматически помещается вне <a> -tag. В результате только изображение можно щелкнуть, а не окружающая панель, которая будет выглядеть как кнопка. Есть ли способ сделать окружную часть части ссылки или поместить изображение внутри кнопки?

В моем проекте используется JSF и библиотека Primefaces:

<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.prime.com.tr/ui">
4b9b3361

Ответ 1

Есть несколько способов добавить изображение в commandButton:

Использование атрибута изображения

<h:commandButton action="#{some_action}" image="button.gif" />

Абсолютный или относительный URL-адрес изображения для отображения этой кнопки. Если указанный, этот "входной" элемент будет быть типа "образ". В противном случае быть типа, указанного "типом", свойство с меткой, указанной в Свойство "значение".

Использовать CSS

<h:commandButton action="#{some_action}" styleClass="button" />

.button {
    background: white url('button.gif') no-repeat top;
}

Ответ 2

Вы можете просто переместить div вне, например.

<div class="myButton">
<h:commandLink action="#{some_action}" styleClass="clickAll">
        <h:graphicImage value="#{some_image}">
</h:commandLink>
</div>

И стиль div таким образом. Просто сделайте отображение привязки (тега) в виде блока, и он должен заполнить весь div, чтобы он был доступен для кликов. Например, в вашем CSS:

.clickAll{
  display:block;
}

Ответ 3

Если вы можете использовать значок из PrimeFaces/JSF, тогда есть простое и надежное решение

<p:column>
    <p:commandButton icon="ui-icon-wrench"
     style="border-width:0;background:none;"/>
</p:column>

Это может помочь избежать кода JavaScript в JSF.

Ответ 4

Если изображение не подходит, добавьте свойства в класс sss:

.button {
    background: white url('button.gif') no-repeat top;
    width: 32px;   // button width
    height: 32px;  // button height
    background-size: contain;
    border: none;  // hide border of button
}