Java 选择一个功能表不';不要使用新值

Java 选择一个功能表不';不要使用新值,java,jsf,Java,Jsf,我在标题中描述了一个问题。我的SelectOne功能表不会更改我的值:/ 这是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

我在标题中描述了一个问题。我的SelectOne功能表不会更改我的值:/


这是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;
}
package at.ac.htlperg.beans;
导入java.util.List;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.SessionScoped;
导入at.ac.htlperg.dao.SectionDAO;
导入at.ac.htlperg.model.Section;
@ManagedBean
@会议范围
公共类分区bean{
段道段道;
公共部分bean(){
sectionDAO=新sectionDAO();
}
公共部分dao getSectionDAO(){
返回段道;
}
公共无效设置节DAO(节DAO节DAO){
this.sectionDAO=sectionDAO;
}
公共列表getSectionList(){
返回sectionDAO.getSectionList();
}
公共字符串删除节(s节){
节。删除节;
返回null;
}
公共字符串开关编辑(s部分){
第DAO节。开关编辑;
返回null;
}
公共字符串saveSection(){
sectionDAO.saveSection(sectionDAO.getSection());
return“/secured/sealed/sections.xhtml”;
}
公共字符串更新节(s节){
节。更新节;
这是一个.switchEdit(s);
返回null;
}
}

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


有人知道出了什么问题吗?

不知道这是否有帮助,但在JSF1.2中,我遇到了类似的问题。问题是h:selectOneMenu返回的是字符串值,而不是我怀疑的对象

也许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>
//ManagedBean
字符串用户标识;
字符串getUserId(){返回this.userId;}
void setUserId(字符串userId){this.userId=userId;}
//JSF

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

假设XHTML中的
s
部分,那么您可以显示其代码吗?还请注意,
s.manager.userID
将导致更改管理器的用户id,而不是该节的管理器。您的模型可能不支持这一点。JSF是否更新了模型值?调试
updateSection()
方法中
节s
的内容。您使用的是什么持久性API?冬眠@Thomas这也是我第一次想到的,但是OP也提到“普通的文本框”也不起作用。这不是一个bug。这是故意的。如果不先将Java对象转换为字符串,则无法将其作为HTTP请求参数传递。即便如此,这也不是OP的具体问题。OP的具体问题已经在托马斯和我对这个问题的评论中确定下来。然而,只要OP不提供任何反馈,就不可能给出合适的答案。