Я хотел бы прочитать значение резервного компонента в JSF, а затем перейти к JavaScript, могу ли я узнать, как это можно сделать?
Пример кода резервного компонента:
@ManagedBean(name="enquiry")
@SessionScoped
public class Enquiry {
public boolean noQuery;
/** getter and setter **/
}
В примере кода XHTML я хотел бы передать значение вспомогательного компонента, а затем перейти в showNoQueryPrompt() следующим образом:
<h:commandLink onClick="showNoQueryPrompt(#{enquiry.noQuery})">
</h:commandLink>
И затем в коде JavaScript я могу прочитать логическое значение, чтобы определить, должен ли я подсказывать или не подсказывать. Вот код:
<script ...>
var showNoQueryPrompt(Boolean showPrompt) {
if( showPrompt == "true" ) {
alert('No query');
}
}
</script>
Ответ 1 · рейтинг 7 · BalusC
По сути, вы должны понимать, что JSF просто создает HTML-код и что JS является частью HTML. Поэтому все, что вам нужно сделать, это написать код JSF/EL таким образом, чтобы он производил корректный код HTML/JS. Действительно, использование EL для встраивания свойств компонента в сгенерированный код JavaScript, как в вашей попытке, является одним из правильных способов.
Предполагая, что это действительно настоящий код, вы допустили несколько синтаксических ошибок. Недопустимый атрибут onClick. Это должно быть все в нижнем регистре. В противном случае JSF просто не будет отображать атрибут вообще.
<h:commandLink value="link" onclick="showNoQueryPrompt(#{enquiry.noQuery})" />
В JavaScript нет понятия строгой типизации. Недопустимый тип Boolean в аргументе функции. Убери это. В противном случае вы столкнетесь с хорошей синтаксической ошибкой JS (в консоли JS браузера).
function showNoQueryPrompt(showPrompt) {
if (showPrompt) {
alert('No query');
}
}
Обратите внимание: я ожидаю, что вы понимаете, что это выполняется до вызова собственной команды action ссылки на команду (теперь вы должны были понять; JSF генерирует HTML; щелкните правой кнопкой мыши страницу в браузере и Просмотреть исходный код, чтобы смотрите сами). Но вы не осветили это в своем конкретном вопросе (более того, вы вообще не описали конкретную проблему с данным кодом в вопросе), поэтому я не могу дать подробный ответ на этот счет.
Ответ 2 · рейтинг 4 · AndaP
Вы можете попробовать подход из здесь
и сохраните поле bean в:
<h:inputHidden id="hidden2" value="#{enquiry.noQuery}" />
затем вызовите свой метод, используя значение этого поля.