我有一个弹出窗口,你必须为你的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个以上的组件
答案 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。