JSF - Как реализовать JavaScript "Вы уверены?" введите <h: commandButton>

В моем веб-приложении JSF 1.2 у меня есть страница с <h:commandButton>, которая вызывает метод действия на основе bean. Это действие приведет к удалению/замене данных в базе данных, поэтому я хочу избежать ситуаций, когда пользователь случайно нажимает на командную кнопку.

Я хотел бы реализовать простой "Ты уверен?" введите "Да/Нет" или "ОК/Отмена" с помощью JavaScript. Я не очень разбираюсь в JavaScript, и я никогда раньше не смешивал JavaScript с JSF. Может ли кто-нибудь предоставить фрагмент кода, чтобы показать мне, как это реализовать?

Вот часть моей страницы JSP, где я объявляю кнопку команды:

<h:commandButton 
    id="commandButtonAcceptDraft"
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif">
</h:commandButton>

РЕШЕНИЕ:

Решение, предоставленное BalusC, отлично справилось. Я хотел бы также упомянуть, что в качестве текста приглашения легко использовать текст из комплекта ресурсов. На моей странице я загружаю ресурсный пакет таким элементом:

<f:loadBundle basename="com.jimtough.resource.LocalizationResources" var="bundle" />

<f:loadBundle> должен находиться внутри вашего <f:view>. Затем я добавляю код, предоставленный BalusC, к элементу кнопки команды, но заменяю строку из моего ресурсного пакета для "Вы уверены?". текст, например:

<h:commandButton 
    id="commandButtonAcceptDraft"
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif"
    onclick="return confirm('#{bundle.confirmationTextAcceptDraft}')">
</h:commandButton>

Строка в моем файле ресурсов на английском языке (просто текстовый файл с парами ключ/значение) выглядит следующим образом:

# text displayed in user prompt when calling confirm()
confirmationTextAcceptDraft=This will overwrite the current report and cannot be undone. Are you sure?

Ответы

Ответ 1

Используйте функцию JavaScript confirm(). Он возвращает значение boolean. Если он возвращает false, действие кнопки по умолчанию будет заблокировано, иначе оно будет продолжено.

<h:commandButton onclick="return confirm('Are you sure?')" />

Поскольку он уже возвращает boolean, нет необходимости обертывать его в if a, предложенном другими ответами.

Ответ 2

Вы можете добавить javascript в onclick кнопки.

<h:commandButton  
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}"  
    action="#{controller.actionReplaceCurrentReportWithDraft}"  
    onclick="return confirm('Are you sure?')"
    image="/images/checkmark.gif"> 
</h:commandButton> 

Ответ 3

Это должно сработать. В идеале это должно быть в файле java script.

<h:commandButton 
    id="commandButtonAcceptDraft"
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif"
     onclick="if (!confirm('Are you sure?')) return false">
</h:commandButton>

Ответ 4

Я не уверен, какое событие вам придется слушать (onclick, я бы предположил), поскольку я никогда не использовал JSF. В общем, это должно сработать.

var element = document.getElementById('commandButtonAcceptDraft');

element.onclick = function(e){
  return confirm('Are you sure etc...');
};