Primefaces-Refreshing下拉列表

时间:2014-11-04 13:36:27

标签: java html mysql jsf primefaces

我有一个弹出窗口,你必须为你的pc选择组件。每个组件都包含一个标签和一个下拉列表,其中包含数据库中的所有选定组件。列表旁边有一个&#39; add&#39;按钮,当点击它时会给出另一个弹出窗口,当用户在列表中找不到他想要的内容时使用该弹出窗口。 add函数调用一个方法,该方法检查用户输入已经存在的输入,如果没有,则添加。我的问题:我找不到刷新更新列表的解决方案。我正在尝试使用<p:ajax />,但我一直在无法找到组件错误。

--- HTML CODE ----

<form id="dialog">
<h:outputText value="Computer: " styleClass="dialog-labels" />

                <ul style="list-style-type: none">

                    <li>
                        <div class="dialog-container">
                            <h:outputLabel value="Processor: " style="float:left;" />
                            <p:selectOneMenu id="procs" filterFunction="true" filterMatchMode="true"  styleClass="dialog-dropdown-list" style="width:15em;">

                                    <f:selectItem itemLabel="Select Processor" itemValue="" noSelectionOption="true" />
                                    <f:selectItems id="list"  value="#{javaHTMLConnection.procList}" />
                            </p:selectOneMenu>

                                <p:commandButton value="Add" id="addProc" styleClass="dialog-buttons" onclick="PF('addProcBox').show();" style="font-size: 10px;" />

                                <h:form id="popUp">

                                    <p:dialog header="Add Processor" widgetVar="addProcBox" height="200" width="180" draggable="false" resizable="false" style="font-size:13px;">   

                                        <h:outputLabel value="Processor: " style="float:left;" />
                                        <p:inputText  id="procInput" value="#{components.procID}"/>

                                                <p:growl id="growl" life="10000" />                                             
                                                <p:commandButton value="Save"  styleClass="dialog-bottom-buttons" action="#{components.addProcessor()}" update="growl" onclick="PF('addProcBox').hide();"  style="font-size: 10px;"  />
                                                <p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":dialog:list" />
                                                <p:commandButton value="Cancel" id="CancelAddProc" styleClass="dialog-bottom-buttons" onclick="PF('addProcBox').hide();"  style="font-size: 10px;" />

                                    </p:dialog>
                                </h:form>   

                        </div>
                    </li>
</form>

---- ---- JavaHTMLConnection

public void onAdd()
{
    if(components.addProcessor()==true)
    {
        components.getAllComponents();
    }
}

----组件(Java代码)----

public boolean addProcessor()
    {
        try
        {
            db.openDatabase();
            db.con.setAutoCommit(false);

            if (!db.ifExists("processor.name", "processor", procID))
            {
                db.Entry("processor", procID);
                addMessage("Success ! Your input has been saved");
                return true;
            }
            else
            {
                addMessage("Error, the input already exists");
            }

        }
        catch (SQLException e)
        {
            try
            {
                db.con.rollback();
            }
            catch (SQLException e1)
            {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }
        finally
        {
            try
            {
                db.con.setAutoCommit(true);
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
        return false;
    }

P.S。:不要介意这个命名,因为当这个问题被解决时,一切都将变得通用,因为我需要将其改编为15个以上的组件

2 个答案:

答案 0 :(得分:3)

正如埃米尔已经提到的,嵌套表格是一件非常糟糕的事情,你应该立刻摆脱它。

另外,正如Emil建议的那样,这种错误消息通常与不正确的组件选择器有关。这些主要是由于选择器中缺少父命名容器这一事实。使用一些调试工具确定正确的id,而不是

<p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":dialog:list" />

尝试使用此主题中建议的一些解决方案:Primefaces - Cannot find component with identifier outside the datatable

我个人更喜欢使用以下语法,它依赖于在各种命名容器中搜索id的primefaces方法:

<p:ajax listener="#{javaHTMLConnection.onAdd()}" update=":#{p:component('list')}" />

答案 1 :(得分:2)

首先,你有嵌套的表格,你应该摆脱它们。

至于问题,你应该检查特定的html元素(例如使用firebug)来找出它的id。