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 Primefaces p:tabView:selectOneMenu的值丢失_Jsf_Jsf 2_Primefaces_Myfaces - Fatal编程技术网

Jsf Primefaces p:tabView:selectOneMenu的值丢失

Jsf Primefaces p:tabView:selectOneMenu的值丢失,jsf,jsf-2,primefaces,myfaces,Jsf,Jsf 2,Primefaces,Myfaces,当我使用带有dynamic=“true”的p:tabView时,我遇到了一个问题,在一个选项卡上有一个h:selectOneMenu,而在另一个选项卡上有一个commandLink,它是ajax=“false”。单击命令链接两次后,selectOneMenu的值将丢失 当选项卡视图为dynamic=“false”时,不会出现此问题 h:inputText的值没有丢失,但我在日志文件中看到以下警告: org.apache.myfaces.shared.renderkit.html.HtmlRend

当我使用带有dynamic=“true”的p:tabView时,我遇到了一个问题,在一个选项卡上有一个h:selectOneMenu,而在另一个选项卡上有一个commandLink,它是ajax=“false”。单击命令链接两次后,selectOneMenu的值将丢失

当选项卡视图为dynamic=“false”时,不会出现此问题

h:inputText的值没有丢失,但我在日志文件中看到以下警告:

org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils decodeUIInput WARNING: There should always be a submitted value for an input if it is rendered, its form issubmitted, and it was not originally rendered disabled or read-only.  You cannot submit a form after disabling an input element via javascript.  Consider setting read-only to true instead or resetting the disabled value back to false prior to form submission. Component : {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId: /form/regional/region.xhtml][Class: javax.faces.component.html.HtmlBody,Id: j_id_5][Class: javax.faces.component.html.HtmlForm,Id: TestForm][Class: org.primefaces.component.tabview.TabView,Id: tabviewTest][Class: org.primefaces.component.tabview.Tab,Id: j_id_8][Class: javax.faces.component.html.HtmlInputText,Id: j_id_f]}
表格如下:

我的环境:Primefaces 5.0/5.1.RC1、Myfaces 2.1/2.2、Tomact 7


有什么想法吗?

您的ManagedBean有什么范围

使用RequestScope时,如果将ajax属性设置为false,则无法提交带有UICommand组件(如p:commandLink)的selectOneMenu。在这种情况下,更改将丢失

以下是解决问题的两种可能性:

尝试1:设置Bean的可视范围: 在大多数情况下,这将起作用。如果必须使用特殊的注释来注释bean(例如apachedeltaspike@viewaccessscope),请尝试将bean分为视图bean和控制器bean,仅使用simple@ViewScope注释视图并保留其中的所有值

尝试2:从p:commandLink: 如果您的用例允许,这将起作用。例如,下载带有PrimeFaces的文件需要明确声明不使用ajax,因此此解决方案将不适用。

添加ajax侦听器

<h:selectOneMenu value="#{Region.dropDownValue}" id="dropDown">
       <f:selectItem itemLabel="" itemValue=""/>
       <f:selectItem itemLabel="1" itemValue="1"/>
       <f:selectItem itemLabel="2" itemValue="2"/>
       <f:selectItem itemLabel="3" itemValue="3"/>
       <f:selectItem itemLabel="4" itemValue="4"/>
       <p:ajax event="change" update="@this"/>
    </h:selectOneMenu>


关于1:ManageBean是会话范围的,所以这不是原因。关于2:我发布的代码是简化的,在实际应用中,我有一些组件可以触发整页提交(因此不可能使用Ajax)。对我来说,如果我使用其中一种尝试,你的例子效果很好。问题的原因很可能来自输入字段的警告。我认为selectMenu的值丢失,inputField的值保持不变,这也不是一种正常的行为。您是否尝试过使用PhaseListener调试应用程序?您所说的“值丢失”是什么意思?您的意思是该值重置为默认值吗?或者它是空的?看,
cache=“true”
dynamic=“true”
在我看来有些矛盾。设置
cache=“true”
然后再试一次。我的意思是设置
cache=“false”
它与
cache=“false”
不起作用-我已经试过了。你已经有了答案。为什么不能使用
dynamic=“false”
public class Region  {

    private Integer dropDownValue = 3;
    private String inputValue = "Test";

    public void someActionMethod(ActionEvent ev) {
        System.out.println("someActionMethod called");
    }

    public Integer getDropDownValue() {
        return dropDownValue;
    }

    public void setDropDownValue(Integer dropDownValue) {
        this.dropDownValue = dropDownValue;
    }

    public String getInputValue() {
        return inputValue;
    }

    public void setInputValue(String inputValue) {
        this.inputValue = inputValue;
    }  
}
<h:selectOneMenu value="#{Region.dropDownValue}" id="dropDown">
       <f:selectItem itemLabel="" itemValue=""/>
       <f:selectItem itemLabel="1" itemValue="1"/>
       <f:selectItem itemLabel="2" itemValue="2"/>
       <f:selectItem itemLabel="3" itemValue="3"/>
       <f:selectItem itemLabel="4" itemValue="4"/>
       <p:ajax event="change" update="@this"/>
    </h:selectOneMenu>