Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Ajax JSF2.0,未在bean中更新部分呈现的表单字段输入值_Ajax_Jsf_Javabeans - Fatal编程技术网

Ajax JSF2.0,未在bean中更新部分呈现的表单字段输入值

Ajax JSF2.0,未在bean中更新部分呈现的表单字段输入值,ajax,jsf,javabeans,Ajax,Jsf,Javabeans,我有一个编辑产品表单,它预先填充了DB中的值。用户可以更改一个或多个值并将表单发回。如果用户选择更改产品图像,则只有在ajax请求后才会呈现一个名为t:inputFileUpload的输入字段。在通过保存按钮最后回发编辑表单期间,bean不会使用t:inputFileUpload字段的值进行更新。表单的相关部分如下: <h:form> <tr> <td>Product Im

我有一个编辑产品表单,它预先填充了DB中的值。用户可以更改一个或多个值并将表单发回。如果用户选择更改产品图像,则只有在ajax请求后才会呈现一个名为t:inputFileUpload的输入字段。在通过保存按钮最后回发编辑表单期间,bean不会使用t:inputFileUpload字段的值进行更新。表单的相关部分如下:

    <h:form>    
                <tr>
                    <td>Product Image*:</td>
                    <td>
                        <h:graphicImage url="#{addItem.prodFileName}" width="100" height="100"/>
                        <br /><h:commandLink  value="change image" >
                            <f:ajax render="uploadimage" execute="@this" listener="#{addItem.ChangeImage}"/>
                        </h:commandLink>
                    </td>
                </tr>

                <tr >
                    <td>
                         <h:panelGroup id="uploadimage">
                            <t:inputFileUpload rendered="#{addItem.editImgChange}" label="editImage" value="#{addItem.uploadedFile}" />
                                <h:messages for="prodimage"/>
                            <h:inputHidden id="hiddeneditimgchange" value="#{addItem.editImgChange}" />
                        </h:panelGroup>
                    </td>
                </tr>
         <h:commandButton value="save" action="#{addItem.EditItem}" />
 </h:form>

我读过一些类似的问题,其中一些问题的答案是将bean的viewscope设置为可见范围。我尝试过将bean的viewscope设置为可见范围,但这打破了我最初预填充表单值的逻辑。由于我对RequestScope很满意,所以如果editImgChange标志的关闭会影响t:inputFileUpload的更新,那么我已经保存了该标志的状态。当我查看bean属性all is fine时,标志为true,但uploadedFile属性为null。

根据注释,您使用
保存状态。这是行不通的。
呈现的
属性在应用请求值阶段进行评估,而该隐藏值在更新模型值阶段可用,因此为时已晚


既然您已经在使用战斧,请改用
。或者,修复使bean视图具有作用域时遇到的问题。我不明白为什么那会是个问题。也许您正在使用
@PostConstruct
,并期望在每个请求中都调用它。然后应改用

如何准确保存
editImgChange
标志的状态?使用上述表单中panelGroup内的InAuthidden标记。值的绑定方式如何?通过
binding
value
?我使用了value标记,因此我相信值是通过value绑定的。因为你在看到我问题中的value标签后就特别问了这个问题,我感到困惑。
是唯一有效的方法,但这需要对bean的构造函数和/或其getter/setter方法进行笨拙的破解。使用
@ViewScoped
更干净。另请参见我的答案。t:saveState帮助了我们。非常感谢。关于viewscope,我要找出哪里出了问题。我没有使用@PostConstruct。
    @ManagedBean
    public class AddItem extends AbstractBean{
        boolean editImgChange;
        private UploadedFile uploadedFile;

        //..
        //getters and setters

        public void ChangeImage(){
                this.editImgChange=true;
            }

        public String EditItem() {
            //some logic 
        }
    }