自动完成方法永远不会被调用到ui:composition中

时间:2017-08-07 13:13:27

标签: jsf primefaces jsf-2 autocomplete

我使用primefaces作为框架来使用自动完成。

如果我只使用没有合成的素数,那么效果很好

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"   xmlns:h="http://xmlns.jcp.org/jsf/html"     xmlns:f="http://xmlns.jcp.org/jsf/core"     xmlns:ui="http://xmlns.jcp.org/jsf/facelets"    xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"> <h:head>  <link href="https://fonts.googleapis.com/icon?family=Material+Icons"        rel="stylesheet" />     <h:outputStylesheet name="css/materialize.css" />   <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>Template</title> </h:head> <h:body class="blue-grey lighten-4">      <ui:include src="cabecalho.xhtml" />

    <h:messages id="erromsg" fatalClass="alert alert-danger"        errorClass="alert alert-danger" infoClass="alert alert-info"        warnClass="alert alert-warning" />

    <ui:insert name="corpo" />

    <ui:include src="/rodape.xhtml" />      <h:outputScript name="js/jquery-2.1.1.js" />    <h:outputScript name="js/mask/jquery.inputmask.bundle.js" />    <h:outputScript name="js/mask/phone.js" />  <h:outputScript name="js/mask/phone-be.js" />   <h:outputScript name="js/mask/phone-ru.js" />   <h:outputScript name="js/materialize.js" />     <script>
        //Select
        $(document).ready(function() {
          $('select').material_select();
        });
                //Carosel       $('.carousel.carousel-slider').carousel({           fullWidth : true,       });         autoplay();

        function autoplay() {           $('.carousel').carousel('next');            setTimeout(autoplay, 4500);         }

        //Menu-Mobile       $(".button-collapse").sideNav();        //Dropdown      $(".dropdown-button").dropdown();

        $(document).on("ready",function(){
            $(".ui-paginator-first.ui-state-default.ui-corner-all").addClass("btn");
            $(".ui-paginator-last.ui-state-default.ui-corner-all").addClass("btn");
            $(".ui-paginator-next.ui-state-default.ui-corner-all").addClass("btn");
            $(".ui-paginator-prev.ui-state-default.ui-corner-all").addClass("btn");

        });
                </script> </h:body> </html>

我使用物化作为前端的框架。

我的测试页:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
    xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"
    xmlns:c="http://xmlns.jcp.org/jsp/jstl/core"
    xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Title</title>
</h:head>
<h:body>
    <ui:composition template="_template.xhtml">
        <ui:define name="corpo">
            <div class="container">
                    <p:autoComplete id="autocomplete"
                        value="#{manterProdutoBean.descMarca}"
                        completeMethod="#{manterProdutoBean.completeMarca}"
                        forceSelection="true" required="true"
                        requiredMessage="Informe a marca!" maxResults="3">
                        <p:ajax event="query" />
                    </p:autoComplete>
                    <br />
                    <p:outputLabel value="Max Results(5):" for="acMaxResults" />
                    <p:autoComplete id="acMaxResults" maxResults="5"
                        value="#{manterProdutoBean.descMarca}"
                        completeMethod="#{manterProdutoBean.completeText}">
                        <p:ajax event="query" />
                    </p:autoComplete>
            </div>
        </ui:define>
    </ui:composition>
</h:body>
</html>

当我使用合成时,我的completemethod永远不会打电话。

请问你能帮帮我吗?

此致

2 个答案:

答案 0 :(得分:0)

伙计们,感谢您的帮助!我找到了解决方案!我导入了2个jquery,一个来自primefaces,另一个来自物化!我禁用了实现jquery,它开始工作了!谢谢大家!

答案 1 :(得分:-1)

你的问题不在于作文......

你需要这样的:

public List<String> complete(String query){
    // Assumed Datasource
    return ds.queryByName(query);
}

申请代码:

public List<Marca> completeText(String name){
    return marcaService.queryByName(name);
}

在你的xhtml中:

<p:autoComplete value="#{manterProdutoBean.descMarca}"
    completeMethod="#{manterProdutoBean.completeText()}"
    var="marca"
    itemValue="#{marca.id}"
    itemLabel="#{marca.descricao}">
</p:autoComplete>

如果您需要在选择项目后执行某些操作,可以使用:

<p:ajax event="itemSelect" />