我想根据预先选择的图标更改commandButton的ActionListener:
<p:dialog id="dialog" header="Add Memo" widgetVar="dialogMemo" resizable="false" >
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="commentInput" value="Comment:" />
<p:inputTextarea id="commentInput" value="#{dashboardBean.getCurrentComment()}" rows="6" cols="25" label="commentInput"/>
<p:watermark for="commentInput" value="Enter your memo..."/>
<h:outputLabel for="selectShare" value="Share Memo: " />
<p:selectBooleanCheckbox id="selectShare" />
<h:outputLabel for="choosePriority" value="Priority:" />
<p:selectOneMenu id="choosePriority" value="#{dashboardBean.currentPriority}" label="choosePriority">
<f:selectItem itemLabel="Low Priority" itemValue="1" />
<f:selectItem itemLabel="Medium Priority" itemValue="2" />
<f:selectItem itemLabel="High Priority" itemValue="3" />
</p:selectOneMenu>
<p:commandButton id="submitDialog" icon="ui-icon-check" value="Confirm" ajax='false' type="submit" action="#{dashboardBean.getLastMemo()}"/>
<p:commandButton icon="ui-icon-close" onclick="dialogMemo.hide();" value="Cancel"/>
</h:panelGrid>
</h:form>
</p:dialog>
<p:layout fullPage="true">
<p:layoutUnit id="leftPanel" position="west" size="250" header="My Memos" resizable="false" closable="false" collapsible="false">
<h:form id="form">
<p:commandButton id="addMemo" icon="ui-icon-plus" onclick="dialogMemo.show();" type="submit" action="#{dashboardBean.getEditControl}"/>
<p:dashboard id="dashboardId" model="#{dashboardBean.model}" binding="#{dashboardBean.dashboard}">
</p:dashboard>
</h:form>
</p:layoutUnit>
</h:body>
当我点击命令按钮(id =“addMemo”)时,我想将actionListener更改为commandButton(id =“submitDialog”)。
我尝试用:
public void getEditControl()
{
UIViewRoot view = _context.getViewRoot();
CommandButton button = (CommandButton) view.findComponent("submitDialog");
System.out.println("I am ID ==== [ " + button.getId() +" ]");
}
但'button.getId()'不起作用。
答案 0 :(得分:2)
但是'button.getId()'不起作用。
我认为这是因为button
实际上是null
,因此尝试调用getId()
方法会引发NullPointerException
?令人惊讶的是你说过这样的问题,“button.getId()不起作用”而不是像“view.findComponent()
返回null
”那样(这反过来是任何企图访问它会抛出NullPointerException
)。如果你确实不知道它为什么抛出NullPointerException
,那么我强烈建议先停止JSF并学习基本的Java。
回到具体问题,当组件树中不存在客户端ID findComponent
时,null
将返回submitDialog
。实际上,你将它放在<h:form>
NamingContainer
组件中。按钮的客户端ID更有可能是formId:submitDialog
,其中formId
是您必须分配的按钮父表单的ID。找出它的一种简单方法是检查生成的按钮HTML表示的ID。
另请参阅此相关问题:How to find out client ID of component for ajax update/render? Cannot find component with expression "foo" referenced from "bar"只需使用findComponent
替换答案中的“ajax”。
答案 1 :(得分:-1)
我不确定你这样做的方式是正确的。 如果你想获得组件实例更好的方法,那就不是通过id得到它而是添加
<p:commandButton id="submitDialog" icon="ui-icon-check"
value="Confirm" ajax='false' type="submit"
action="#{dashboardBean.getLastMemo()}" binding="#{dashboardBean.component}" />
这样,bean中的属性将始终具有您需要的组件实例。 请注意,应该查看放置组件绑定的bean的范围,以避免副作用。