Как передать значение резервного компонента в JavaScript?

Я хотел бы прочитать значение резервного компонента в 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>

person huahsin68    schedule 24.10.2012    source источник
comment
просто поместите его в скрытый ввод   -  person Daniel    schedule 24.10.2012


Ответы (2)


По сути, вы должны понимать, что 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; щелкните правой кнопкой мыши страницу в браузере и Просмотреть исходный код, чтобы смотрите сами). Но вы не осветили это в своем конкретном вопросе (более того, вы вообще не описали конкретную проблему с данным кодом в вопросе), поэтому я не могу дать подробный ответ на этот счет.

person BalusC    schedule 24.10.2012
comment
Это очень плохо, мне нужно enquiry.noQuery обновить 1, прежде чем вызывать предупреждение. - person huahsin68; 25.10.2012
comment
Как ответили, вы никогда не уточняли конкретные функциональные требования в вопросе, поэтому я не смог подробно ответить на это. Но все, что вы хотите, определенно возможно. - person BalusC; 25.10.2012
comment
Спасибо за комментарий, я подниму еще один вопрос, так как не хочу загрязнять вопрос расширенным ответом. - person huahsin68; 25.10.2012

Вы можете попробовать подход из здесь

и сохраните поле bean в:

<h:inputHidden id="hidden2" value="#{enquiry.noQuery}" />

затем вызовите свой метод, используя значение этого поля.

person AndaP    schedule 24.10.2012