JSF javascript логическое представление
Какой самый простой способ включить рендеринг компонента JSF на основе флага javascript? Я хочу отображать определенные вещи в зависимости от того, включен ли у пользователя HTML5... например, геолокация, выбор даты и т. Д.
Спасибо д
3 ответа
В этом ответе предполагается, что вы знаете, как использовать javascript, чтобы проверить, поддерживает ли пользователь HTML5. Вот идея. Один из способов взаимодействия javascript с bean-компонентом, управляемым сервером JSF, заключается в том, чтобы javascript вызывал click
событие на скрытом commandButton
, Итак, вот как вы это делаете. Эта командная кнопка может затем вызвать функцию на вашем компоненте поддержки, например, установить флаг для отображения определенного компонента на вашей странице. Для запроса ajax вы можете использовать PrimeFaces p:commandButton
с update
атрибут для частичного обновления.
- На вашей странице есть скрытая форма с
inputText
иp:commandButton
- Определите, поддерживает ли пользователь 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;
}
}
}
Вы можете использовать компонент a4j:jsFunction. Установите флаг рендера в вашем bean и reRender
Можете ли вы поместить отображение компонента в HTML-контейнер div, а затем скрыть / показать этот контейнер.