无法从fileDownloadActionListener中的ADF组件获取值

时间:2012-11-05 11:14:31

标签: java nullpointerexception download oracle-adf

我正面临一个问题,我无法找到任何解决方案...... 我有一个像这样的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文件,并让浏览器下载该文件。有人能指出我正确的方向吗?

1 个答案:

答案 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();  

这将触发隐藏按钮而不按下它。 (确保你当然有约束力)