我正面临一个问题,我无法找到任何解决方案...... 我有一个像这样的selectManyChoice组件:
<af:selectManyChoice value="#{bindings.my_VO1.inputValue}"
label="myLabel" id="smc1"
binding="#{pageFlowScope.myBean.myMultiSelection}"
autoSubmit="true">
<f:selectedItems value="#{bindings.my_VO1.items}" id="si1"/>
</af:selectManyChoice>
为了获得价值,我使用2个按钮进行了测试:
<af:commandButton text="First Button"
id="cb1"
action="#{pageFlowScope.myBean.saveSelection}>
<af:fileDownloadActionListener method="#{pageFlowScope.myBean.exportReport}"/>
</af:commandButton>
和
<af:commandButton text="Second Button"
id="cb2"
action="#{pageFlowScope.myBean.saveSelection}/>
第二个按钮可以成功获取所选值并将其打印到屏幕上。但是,第一个按钮不能。当我试图在这行代码中调用myMultiSelection.getValue()时,它总是抛出NullPointerException:
public String saveSelection() {
if (myMultiSelection.getValue() != null) {
它们之间的唯一区别是fileDownloadActionListener标记。我想知道该标签是否影响了第一个按钮的内部工作......但是,我仍然需要该标签,因为该按钮的目的是根据所选值生成pdf文件,并让浏览器下载该文件。有人能指出我正确的方向吗?
答案 0 :(得分:2)
你可以这样试试: 使用第二个按钮,在actionlistener中调用fileDownloadActionListener。这样您就可以确定所选值是否正确。
示例:http://adfwithejb.blogspot.be/2012/08/calling-affiledownloadactionlistener_2.html
修改: 而不是使用JS来调用actionlistener,你可以这样做:
将这些添加到您的页面:
<af:commandButton text="Hidden Button" binding="#{pageFlowScope.myBean.btnHiddenButton}"
id="cb1" visible="false">
<af:fileDownloadActionListener method="#{pageFlowScope.myBean.exportReport}"/>
</af:commandButton>
<af:commandButton text="Visible Button"
id="cb2"
action="#{pageFlowScope.myBean.saveSelection}/>
然后在你的bean中,转到saveSelection方法并做一些事情来获取正确的数据。 之后添加:
ActionEvent event = new ActionEvent(btnHiddenButton);
event.queue();
这将触发隐藏按钮而不按下它。 (确保你当然有约束力)