SelectOneMenu不使用新值

时间:2012-01-14 13:04:21

标签: java jsf

我遇到了标题中描述的问题。我的selectOneMenu不会改变我的价值:/

<h:column>
                        <f:facet name="header">
                            <h:outputText value="Vorgesetzter" />
                        </f:facet>
                        <h:outputText
                            value="#{s.manager.surename}, #{s.manager.forename}"
                            rendered="#{not s.editable}" />
                        <h:selectOneMenu value="#{s.manager.userID}"
                            styleClass="inputlabel" id="Vorgesetzter"
                            rendered="#{s.editable}">
                            <f:selectItem
                            itemValue="${null}" itemLabel="-"/>
                            <f:selectItems value="#{userBean.userList}" var="us"
                                itemLabel="#{us.surename}, #{us.forename}"
                                itemValue="#{us.userID}" />
                        </h:selectOneMenu>
                    </h:column>
                    <h:column>
                        <h:commandButton value="bearbeiten"
                            action="#{sectionBean.switchEdit(s)}" 
                            rendered="#{not s.editable}" />
                        <h:commandButton value="speichern"
                            action="#{sectionBean.updateSection(s)}"
                            rendered="#{s.editable}" />
                        <h:commandButton value="abbrechen"
                            action="#{sectionBean.switchEdit(s)}"
                            rendered="#{s.editable}" />
                    </h:column>

这是sections.xhtml的一部分。它被表单标签所包围。

这是我的豆子:

package at.ac.htlperg.beans;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import at.ac.htlperg.dao.SectionDAO;
import at.ac.htlperg.model.Section;
@ManagedBean
@SessionScoped
public class SectionBean {
    SectionDAO sectionDAO;

public SectionBean() {
    sectionDAO = new SectionDAO();
}

public SectionDAO getSectionDAO() {
    return sectionDAO;
}

public void setSectionDAO(SectionDAO sectionDAO) {
    this.sectionDAO = sectionDAO;
}

public List<Section> getSectionList() {
    return sectionDAO.getSectionList();
}

public String deleteSection(Section s) {
    sectionDAO.deleteSection(s);
    return null;
}

public String switchEdit(Section s) {
    sectionDAO.switchEdit(s);
    return null;
}

public String saveSection() {
    sectionDAO.saveSection(sectionDAO.getSection());
    return "/secured/sealed/sections.xhtml";
}

public String updateSection(Section s) {
    sectionDAO.updateSection(s);
    this.switchEdit(s);
    return null;
}

}

方法updateSection应该访问数据库并执行session.update(s)。 但它不会在selectOneMenu中保存新值,也不会在上面的常用文本框中保存新值(不在显示的代码中)。

任何人都知道什么是错的?

1 个答案:

答案 0 :(得分:0)

不知道它是否有帮助,但在JSF 1.2中我有类似的问题。问题是h:selectOneMenu返回了String值而不是我怀疑的对象。

对于JSF2.0,可能没有解决这个“bug”。

尝试类似:

// ManagedBean
String userId;

String getUserId(){return this.userId;}
void setUserId(String userId){this.userId = userId;}

// JSF
<h:selectOneMenu value="#{managedBean.userId}"
                        styleClass="inputlabel" id="Vorgesetzter"
                        rendered="#{s.editable}">                            
    <f:selectItems value="#{userBean.userList}" var="us"
                   itemLabel="#{us.surename}, #{us.forename}"
                   itemValue="#{us.userID}" />
</h:selectOneMenu>

在使用userId之前将其转换为您想要的对象,或者只是尝试使用转换器。