JSF javascript логическое представление - PullRequest
1 голос
/ 13 июля 2011

Какой самый простой способ переключить рендеринг компонента JSF на основе флага javascript? Я хочу отобразить некоторые вещи в зависимости от того, включен ли пользователь HTML5 ... например. геолокация, сборщик даты и т. д.

Спасибо, D

Ответы [ 3 ]

1 голос
/ 13 июля 2011

В этом ответе предполагается, что вы знаете, как использовать javascript, чтобы проверить, поддерживает ли пользователь HTML5.Вот идея.Один из способов взаимодействия javascript с управляемым компонентом JSF-сервера заключается в том, чтобы javascript вызывал событие click для скрытого commandButton.Итак, вот как вы это делаете.Эта командная кнопка может затем вызвать функцию на вашем компоненте поддержки, например, установить флаг для отображения определенного компонента на вашей странице.Для запроса ajax вы можете использовать PrimeFaces p:commandButton с атрибутом update для частичного обновления.

  1. У вас есть скрытая форма на вашей странице с inputText и p:commandButton
  2. Определите, поддерживает ли пользователь HTML5, используя javascript, затем вызовите событие click для commandButton.inputText есть, чтобы вы могли передать флаг обратно на сервер.

Например:

<h:form style="display:none">
    <h:inputText id="flag" value="#{myBean.flag}"/>
    <p:commandButton id="button" actionListener="#{myBean.process}" update="..."/>
</h:form>

, чтобы ваш jQuery выглядел следующим образом

 if(user is HTML5 enabled){
      jQuery("#flag").val("Flag that let you know user has HTML5 enable.")
      jQuery("#button").click();
 }else{
     //Same thing as above but passing a flag that you know user dont have HTML5 enabled
 }

В вашем управляемом бине у вас будет

@ManagedBean
@RequestScoped
public class MyBean{
    private String flag;
    private boolean display;
    //setter and getter for `flag` and `display`

    public void process(){
        if(flag.equals("HTML5")){
            display = true;
        }else{
            display = false;
        }
    }
}    
0 голосов
/ 13 июля 2011

вы можете использовать компонент a4j: jsFunction. Установите флаг рендера в вашем bean и reRender

0 голосов
/ 13 июля 2011

Можете ли вы поместить отображение компонента в HTML-контейнер div, а затем скрыть / показать этот контейнер.

...