0

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

4

1 回答 1

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

这将触发隐藏按钮而不按下它。(当然要确保你有绑定)

于 2012-11-05T11:26:59.760 回答