JSF - Как мне реализовать JavaScript "Вы уверены?" запрос на <h: commandButton> - PullRequest
13 голосов
/ 10 ноября 2010

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

Я хотел бы реализовать простое «Вы уверены?»подсказка с опциями «Да / Нет» или «OK / Отмена» с использованием 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?

Ответы [ 4 ]

26 голосов
/ 10 ноября 2010

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

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

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

3 голосов
/ 10 ноября 2010

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

<h:commandButton  
    id="commandButtonAcceptDraft" 
    title="#{bundle.tooltipAcceptDraft}"  
    action="#{controller.actionReplaceCurrentReportWithDraft}"  
    onclick="return confirm('Are you sure?')"
    image="/images/checkmark.gif"> 
</h:commandButton> 
2 голосов
/ 10 ноября 2010

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

<h:commandButton 
    id="commandButtonAcceptDraft"
    title="#{bundle.tooltipAcceptDraft}" 
    action="#{controller.actionReplaceCurrentReportWithDraft}" 
    image="/images/checkmark.gif"
     onclick="if (!confirm('Are you sure?')) return false">
</h:commandButton>
1 голос
/ 10 ноября 2010

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

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

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