【发布时间】:2011-11-03 16:09:12
【问题描述】:
我有一个页面,无论数据库上是否有一些信息,都会呈现 SelectOneMenu。 我的表单如下所示:
...
<h:form id="wrapperUpload" enctype="multipart/form-data" >
<h:outputLabel for="option" value="Tipo de carga: "
rendered="#{uploadFile.check(userVerifier.dependencia)}" />
<h:selectOneMenu id="option"
value="#{uploadFile.optionSelected}"
rendered="#{uploadFile.check(userVerifier.dependencia)}" >
<f:selectItems value="#{uploadFile.options}" />
</h:selectOneMenu>
<h:outputLabel for="upfile" value="Archivo: " />
<t:inputFileUpload id="upfile" required="true"
value="#{uploadFile.upFile}" />
<h:commandButton value="Validar #{userVerifier.dependencia}"
action="#{uploadFile.upload}"
onclick="return confirmation()" >
<f:param name="dependencia" value="#{userVerifier.dependencia}" />
</h:commandButton>
</h:form>
...
我的豆子是
private UploadedFile upFile;
private boolean showOptions = false;
private final String[] options = {
"Seleccione una opción.",
"Cargar toda la información.",
"Cargar solo información errónea."
};
private String optionSelected;
private Database db = new Database();
public UploadedFile getUpFile() {
return upFile;
}
public void setUpFile(UploadedFile upFile) {
this.upFile = upFile;
}
public String[] getOptions() {
return options;
}
public void setOptionSelected(String optionSelected) {
this.optionSelected = optionSelected;
}
public String getOptionSelected() {
return optionSelected;
}
public boolean check(String dependencia) {
String hasInfo;
hasInfo = db.checkForInfo(dependencia);
if (hasInfo.equals("T")) {
showOptions = true;
} else {
showOptions = false;
}
return showOptions;
}
public String upload() {
byte[] buffer = null;
int count = 0;
File serverFile = null;
InputStream input = null;
OutputStream output = null;
Map<String, String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
String dependencia = params.get("dependencia");
String extension = FilenameUtils.getExtension(upFile.getName());
System.out.println("__depend: " + dependencia);
System.out.println("__option: " + optionSelected); //null
...
...
最后,当我点击按钮时,SelectOneMenu(或我的 bean 中的 selectedOption)的值始终为空... 如何解决这个问题?我错过了什么吗?
忘了提一下,如果我删除渲染部分一切正常...
【问题讨论】:
-
这不是真正的代码。您没有
isCheck()方法,也没有使用rendered="#{uploadFile.check('somestring')}"。它在显示表单时已经抛出 EL 异常。请出示真实代码。 -
很抱歉告诉你,但它是真正的代码,我省略了其余的代码,但基本上这就是我所拥有的......但我会发布所有代码,所以也许你可以帮忙。
-
rendered="#{uploadFile.check}"需要public boolean isCheck()方法,而不是public boolean check(String dependencies)方法。它应该抛出一个 EL 异常。你用的是什么容器? -
就是这样,希望对您有所帮助。抱歉,如果我发布不完整的代码。哦,我明白你的意思了...我会尝试纠正它...但它不会发送任何 EL 异常,但为了保持良好的实践,我会更改它。
-
现在,由于您将其更改为
rendered="#{uploadFile.check(userVerifier.dependencia)}",它看起来更好。最初你有rendered="#{uploadFile.check}",它与给定的方法结合使用是无效的。
标签: jsf selectonemenu