У меня есть страница, на которой отображается 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 (или selectedOption в моем компоненте) всегда равно нулю... Как это исправить? Я что-то упускаю?
Забыл упомянуть, что если я удалю часть рендеринга, все будет работать нормально...
isCheck()
и вы не используетеrendered="#{uploadFile.check('somestring')}"
. Это уже вызовет исключение EL при отображении формы. Пожалуйста, покажите реальный код. - person BalusC   schedule 03.11.2011rendered="#{uploadFile.check}"
ожидает методpublic boolean isCheck()
, а не методpublic boolean check(String dependencies)
. Это должно было вызвать исключение EL. Какой контейнер вы используете? - person BalusC   schedule 03.11.2011rendered="#{uploadFile.check(userVerifier.dependencia)}"
, он выглядит лучше. Изначально у вас былоrendered="#{uploadFile.check}"
, что недопустимо в сочетании с данным методом. - person BalusC   schedule 03.11.2011