我有一个JSF页面,一个从服务中获取值的下拉列表。
<h:selectOneMenu id="valueList" value="#" style="height:20px;">
<f:selectItem itemValue="Select Action" itemLabel="Select Action" />
<f:selectItems value="#{sampleService.sampleMethod}"
var="SampleExport" itemValue="#{SampleExport}"
itemLabel="#{SampleExport}">
</f:selectItems>
</h:selectOneMenu>
exportlist包含 - abc,xyz
sampleService类
public class SampleServiceImpl implements .... {
private List<String> sampleList;
public List<String> getSampleList;() {
return sampleList;
}
public void setSampleList;(List<String> sampleList;) {
this.sampleList=sampleList;;
}
/**
* Method for List to be displayed in drop down
*/
public void sampleMethod(){
if (sampleList== null) {
sampleList = new ArrayList<String>();
sampleList.add("abc");
sampleList.add("xyz");
}
setSsampleList(sampleList);
}
}
并且有一个动作按钮,用于根据值类型的选择生成pdf,即abc或xyz。
clicktoPdf按钮
<ui:define name="actions">
<h:commandButton styleClass="inputbutton" value="GeneratePdf" id="export"
action="#{generatePdf.pdfReport}" style="float:right;width : 73px;" />
</ui:define>
public class GeneratePdf {
public void pdfReport() {
..........
...code....
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell(0);
..........
.code..........
methodAbc(){
.....
}
method Xyz(){
......
}
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
externalContext.setResponseContentType("application/vnd.ms-excel");
externalContext.setResponseHeader("Content-Disposition",
"attachment; filename=\"Sample Report\"");
workbook.write(externalContext.getResponseOutputStream());
facesContext.responseComplete();
}
}
我需要为从下拉列表中选择的值生成pdf。如果选择“abc”,则应调用methodAbc(),如果选择“xyz”,则应调用 methodXyz()。
下拉列表中还可以包含更多值 - abc,xyz,pqr,rst等等。我知道为下拉列表中的每个值添加方法是不可行的。
答案 0 :(得分:2)
创建私有财产:
public class GeneratePdf {
private String selectedValue;
//getter/setter
将其绑定到selectonemenu:
<h:selectOneMenu id="valueList" value="#{generatePdf.selectedValue}"
提交时,selectedValue
将在下拉列表中选择值。您可以在pdfReport()
方法中使用它。
答案 1 :(得分:0)
我需要为从下拉列表中选择的值生成pdf。如果选择“abc”,则应调用methodAbc(),如果选择“xyz”,则应调用methodXyz()。
假设您已为selectedValue设置了getter和setter,并且已将此变量绑定到selectonemenu,如另一个答案所示,我看到的唯一方法是:
void methodGeneral() { // always invoked
if (selectedValue.equals("abc") {
methodAbc();
else if (selectedValue.equals("xyz") {
methodXyz();
// etc etc
下拉列表中还可以包含更多值 - abc,xyz,pqr,rst等等。我知道为下拉列表中的每个值添加方法都不可行。
我同意:这不是特别可行,但这正是你的要求。