Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 简单相关SelectOne菜单不工作_Jsf 2 - Fatal编程技术网

Jsf 2 简单相关SelectOne菜单不工作

Jsf 2 简单相关SelectOne菜单不工作,jsf-2,Jsf 2,我有以下代码,其中显示两个SelectOne菜单。第一个菜单的值是语言,第二个菜单告诉我,如果是英语,则选择“一个或两个”,如果是西班牙语,则选择“uno或duo” 我还需要确定我是否选择了项目“2”,如果我现在将语言更改为“Sp”,则“duo”必须是所选项目 我该怎么做?这是我的 index.html: <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr

我有以下代码,其中显示两个SelectOne菜单。第一个菜单的值是语言,第二个菜单告诉我,如果是英语,则选择“一个或两个”,如果是西班牙语,则选择“uno或duo”

我还需要确定我是否选择了项目“2”,如果我现在将语言更改为“Sp”,则“duo”必须是所选项目

我该怎么做?这是我的

index.html:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">

    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
                           <h:form id="myForm">
                                    <h:panelGrid columns="4">
                                        <h:outputLabel value="Language:" />
                                        <h:selectOneMenu value="#{myBean.language}">
                                            <f:selectItems value="#{myBean.languages}" />
                                            <f:ajax listener="#{myBean.doUpdate}" render ="myForm" />
                                        </h:selectOneMenu>

                                        <h:outputLabel value="Items:" />
                                        <h:selectOneMenu value="#{myBean.item}">
                                            <f:selectItems value="#{myBean.items}" />
                                            <f:ajax listener="#{myBean.doUpdate}" render ="myForm" />
                                        </h:selectOneMenu>
                                         <h:panelGrid columns="1" id ="show" >
                                            <h:outputLabel value="#{myBean.language} #{myBean.item}"/>
                                        </h:panelGrid>

                                    </h:panelGrid>
                                </h:form>
    </h:body>
</html>

Facelet标题
MyBean:

package bean;



import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;



@ManagedBean(name = "myBean")
//@Stateless
@Stateful
@ViewScoped
public class MyBean implements Serializable{


    private List<String> languages;
    private String language;
    private String item;
    private List<String> items;

    public List<String> getItems() {
        return items;
    }

    public void setItems(List<String> items) {
        this.items = items;
    }


    /**
     * init() method for initializing the bean. Is called after constuction.
     */

    @PostConstruct
    private void init() {
    //public MyBean () {
        languages = getAllLanguages();
        language = "en"; //defaultLanguage 
        items = getItemsFromOverview();
    } 

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public List<String> getLanguages() {
        System.out.println("getLanguages, language " +language);
        return languages;
    }



    public String getLanguage() {
        System.out.println("getLanguage " +language);
        return language;
    }

    public void setLanguage(String language) {
        System.out.println("setLanguage " +language);
        this.language = language;
    }




    public List<String> getAllLanguages() {
        List<String> results = new ArrayList<String>();
        results.add("sp");
        results.add("en");

        if(results != null){
            System.out.println("getting all languages");
        }
        return results;
    }


    public void doUpdate() {

         System.out.println("doUpdate language " +language);
         System.out.println("doUpdate item " +item);

    }

    /**
     * Returns a list of all serialIDs present in the overview.
     * @return 
     */
    private List<String> getItemsFromOverview() {
        List<String> results = new ArrayList<String>();

        if(language.equalsIgnoreCase("en")){
            results.add("one");
            results.add("two");
        }
        else {
            results.add("uno");
            results.add("duo");

        }
                return results;
    }


}
packagebean;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.List;
导入javax.annotation.PostConstruct;
导入javax.ejb.Stateful;
导入javax.enterprise.context.RequestScope;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.ViewScoped;
@ManagedBean(name=“myBean”)
//@无国籍
@有状态
@视域
公共类MyBean实现了可序列化{
私人名单语言;
私有字符串语言;
私有字符串项;
私人清单项目;
公共列表getItems(){
退货项目;
}
公共无效集合项(列表项){
这个项目=项目;
}
/**
*用于初始化bean的init()方法。在构造后调用。
*/
@施工后
私有void init(){
//公共豆豆(){
语言=getAllLanguages();
language=“en”//defaultLanguage
items=getItemsFromOverview();
} 
公共字符串getItem(){
退货项目;
}
公共void集合项(字符串项){
this.item=项目;
}
公共列表getLanguages(){
System.out.println(“getLanguages,language”+语言);
返回语言;
}
公共字符串getLanguage(){
System.out.println(“getLanguage”+语言);
返回语言;
}
公共语言(字符串语言){
System.out.println(“设置语言”+语言);
这种语言=语言;
}
公共列表getAllLanguages(){
列表结果=新建ArrayList();
结果。添加(“sp”);
结果。添加(“en”);
如果(结果!=null){
System.out.println(“获取所有语言”);
}
返回结果;
}
公共无效数据更新(){
System.out.println(“双更新语言”+语言);
系统输出打印项次(“更新项”+项);
}
/**
*返回概述中存在的所有SerialID的列表。
*@返回
*/
私有列表getItemsFromOverview(){
列表结果=新建ArrayList();
if(语言等信号情况(“en”)){
结果。添加(“一”);
结果。添加(“两”);
}
否则{
结果。添加(“uno”);
结果。添加(“duo”);
}
返回结果;
}
}

很简单。您忘了更改第二个列表(
)的当前值。按如下操作

<h:form id="myForm">
    <h:selectOneMenu id="list1" value="#{myBean.language}" actionListener="#{myBean.updateFiledsInList2}">
        <f:selectItems value="#{myBean.languages}" />
        <f:ajax execute="@this" render ="list2 lang" />
    </h:selectOneMenu>
    <h:selectOneMenu id="list2" value="#{myBean.item}" >
        <f:selectItems value="#{myBean.items}" />
        <f:ajax execute="@this" render="item" />
    </h:selectOneMenu>
    <h:outputText id="lang" value="#{myBean.language}"/>
    <h:outputText id="item" value="#{myBean.item}"/>
</h:form>

顺便说一句,这是西班牙语的dos;)你让它工作了吗?如果我在表单名上执行ajax怎么办?那么它是否应该根据菜单1更新菜单2?你可以指定
render=“@form”
,但这实际上是一项开销。如果您想更新某些内容,并且应该知道要更新的内容,请更新它。否则,请更好地考虑代码的结构。此外,从属列表应保留disctinct值,如汽车品牌-车型。如果您有一个具有多语言支持的列表,则您的设置将大大改进t和其他保存语言选择的位置(会话范围的bean、视图参数等)。这样,您的列表将在bean的构造过程中初始化。
public void updateFiledsInList2(ActionEvent event) {
    if(language.equals("en")) {
        items = new ArrayList<String>();
        items.add("one");
        items.add("two");
    } else if(language.equals("es")) {
        items = new ArrayList<String>();
        items.add("uno");
        items.add("dos");
    } else {
        items = null;
    }
}
public void updateFiledsInList2(ActionEvent event) {
    int index = (item == null) ? -1 : items.indexOf(item);
    if(language.equals("en")) {
        items = new ArrayList<String>();
        items.add("one");
        items.add("two");
    } else if(language.equals("es")) {
        items = new ArrayList<String>();
        items.add("uno");
        items.add("dos");
    } else {
        items = null;
    }
    if(index >= 0) {
        item = (items == null) ? null : items.get(index);
    } else {
        item = null;
    }
}