我正在尝试从一些项目中生成一个导出文件,这些项目应该符合一些“标准”以便能够被导出。问题是:用户应该选择一些项目(通过使用复选框),然后单击 ICEFaces 的OutputResource以导出(希望是全部)所选项目。
该过程涉及的部分如下:
XHTML 中的 OutputResource:
<ice:outputResource rendered="#{not myBackingBean.emptySelection}" resource="#{myBackingBean.excelResource}" label="export to Excel" shared="false" target="_self" />
持有资源的支持 bean:
@ManagedBean(name = "myBackingBean")
@ViewScoped
@WindowDisposed
public class MyBackingBean implements Serializable
{
...
private ExcelResource resource;
...
}
最后,实际资源:
...
import com.icesoft.faces.context.Resource;
...
public class ExcelResource implements Resource
{
...
@Override
public InputStream open() throws IOException
{
//do some selection here. If there is no valid ticket to export then
//this method will return null, otherwise it will return an InputStream
//and everything will work properly
if (everythingOk)
{
return new ByteArrayInputStream(...);
}
//hopefully, it won't get to this point
return null;
}
如您所见,我正在实现com.icesoft.faces.context.Resource
接口并覆盖open()
“即时”创建 Excel 导出的方法。
现在,再一次,我想要做的是过滤一些最初选择的项目,如果没有留下任何项目,请导航到某个错误页面。如果这是 anh:commandButton
或 anice:commandLink
那么我将使用action属性来执行此操作,但我不能在这里执行此操作,因为这是一个ice:outputResource
. 有一些解决方法吗?请注意,仅使用render属性是不够的,因为用户可以选择某些内容(这将立即呈现ice:outputResource
),但是在导出之前应该过滤选择。
最后但同样重要的是:我正在使用 Websphere 8 和 ICEFaces 3 来执行此操作。
提前致谢!