Jsf 引申形式。保存或加载后清除表单

Jsf 引申形式。保存或加载后清除表单,jsf,primefaces,primefaces-extensions,Jsf,Primefaces,Primefaces Extensions,我已经使用如下所示的组件构建了一个类似primefaces扩展向导的表单,包括步骤: 我的back bean是视图范围的,但是当我完成步骤并保存表单时,在随后的表单加载中它不会被刷新或清除(我在第一次提交表单时选择的值仍然存在) “我的命令”按钮位于向导面板代码的末尾,如下所示: <h:form id="WizardForm"> <pe:masterDetail id="masterDetail" level="#{reviewWizard.curre

我已经使用如下所示的组件构建了一个类似primefaces扩展向导的表单,包括步骤:

我的back bean是视图范围的,但是当我完成步骤并保存表单时,在随后的表单加载中它不会被刷新或清除(我在第一次提交表单时选择的值仍然存在)

“我的命令”按钮位于向导面板代码的末尾,如下所示:

<h:form id="WizardForm">            
<pe:masterDetail id="masterDetail" level="#{reviewWizard.currentLevel}" showBreadcrumb="false" style="margin-top:20px"> 
    <f:facet name="header">
    ...
    </f:facet>
    <pe:masterDetailLevel level="1">        
    <p:dataTable id="patients" var="patient"
                value="#{reviewWizard.cRImageDataListPatients}"
                selection="#{reviewWizard.selectedPatients}" rowKey="#{patient}"
                paginator="true" rows="10" paginatorAlwaysVisible="false"
                emptyMessage="No records found" >
        <p:ajax event="rowToggle" listener="#{reviewWizard.onRowToggle}"
                update=":WizardForm:patients:selectedPatientImages" />
        <f:facet name="header"> 
            Select one or many images using the checkboxes and press &quot;Next&quot; button to proceed.  
        </f:facet>
        <p:column selectionMode="multiple" style="width:18px" styleClass="mandara"/>
        <p:column style="width:18px">
        <p:rowToggler />
        </p:column>
        <p:column headerText="Patient ID">  
        #{patient}  
        </p:column>                     
            <p:rowExpansion>
            <p:dataTable id="selectedPatientImages" var="cRImageData"
                    value="#{reviewWizard.getSelectedPatientImages()}"
                    rowKey="#{cRImageData.imId}" emptyMessage="No records found"
                    style="padding:10px 40px;">
                <p:column headerText="Image Name">  
                #{cRImageData.imName}  
                </p:column>
                <p:column headerText="Image Type">  
                #{cRImageData.imType}  
                </p:column>
                ...                 
            </p:dataTable>
            </p:rowExpansion>
            ...
            </p:dataTable>
        <p:commandButton value="Next" process="masterDetail" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-e">
        <pe:selectDetailLevel step="1"/>
        </p:commandButton>
    </pe:masterDetailLevel>
    <pe:masterDetailLevel level="2">
    ... 
    </pe:masterDetailLevel>
    <pe:masterDetailLevel level="3">
    ...
    </pe:masterDetailLevel>    
    <pe:masterDetailLevel level="4">        
        ...
    </pe:masterDetailLevel>
    <pe:masterDetailLevel level="5">        
            <p:panel header="Confirmation">            
            <p:panel style="border:none;">
                <h:outputText value="Selected Patients: " style="font-weight:700;"/>
                <h:outputText value="#{reviewWizard.getSelectedPatiensString()}" />
            </p:panel>      
            <p:panel style="border:none;">      
                    <h:outputText value="Selected Features: "  style="clear:left;font-weight:700;"/>
                    <h:outputText value="#{reviewWizard.getSelectedFeaturesString()}" />
            </p:panel>      
            <p:panel style="border:none;">
                    <h:outputText value="Selected Reviewers: "  style="clear:left;font-weight:700;"/>
                    <h:outputText value="#{reviewWizard.getSelectedReviewersString()}" />
            </p:panel>      
            <p:panel style="border:none;">
                    <h:outputText value="Protocol Description: "  style="clear:left;font-weight:700;"/>
                    <h:outputText value="#{reviewWizard.getReviewProtocolDesc()}" />
            </p:panel>        
                   <p:commandButton value="Back" style="margin-top: 10px;" icon="ui-icon-arrowthick-1-w"  
                     process="@this" immediate="true">  
                        <pe:selectDetailLevel step="-1"/>  
                   </p:commandButton>  
                   <p:commandButton value="Submit" process="masterDetail"  
                     actionListener="#{reviewWizard.save}"  
                     style="margin-top: 10px;" icon="ui-icon-disk">
                        <pe:selectDetailLevel level="1" resetInputs="@all"/>  
                    </p:commandButton>        
             </p:panel>
    </pe:masterDetailLevel> 
</pe:masterDetail>          
</h:form>

...
使用复选框选择一个或多个图像,然后按“下一步”按钮继续。
#{患者}
#{cRImageData.imName}
#{cRImageData.imType}
...                 
...
... 
...
...
和我的backbean(在“save”操作结束时创建新的空对象,如primefaces extensions相关示例中所建议的):

ManagedBean(name=“reviewWizard”)
@视域
公共类ReviewWizard实现可序列化{
私有静态最终长serialVersionUID=-7410916604435445849L;
私人名单患者;
私有列表cRImageDataListPatientImages;
private CRImageData[]选择的图像;
私有字符串[]选择的患者;
可用的私有列表变量;
private CRVariable[]selectedVariables;
私人审查协议审查协议;
私有字符串reviewProtocolDescription;
可供浏览者使用的私人列表;
私人用户[]选择的浏览器;
私有列表可用于查看内部;
private CRReviewerData[]已选择的远程用户内部;
私有CRTask[]CRTask;
私有int currentLevel=1;
//记录器
私有静态记录器Logger=Logger.getLogger(ReviewWizard.class.getName());
私有静态最终字符串SUCCESS=“SUCCESS”;
私有静态最终字符串ERROR=“ERROR”;
//关于报表加载的问题
@抑制警告(“未选中”)
@施工后
公共void init(){
//向UPM调用SOAP服务以获取患者
CallWebService CallWebService=新建CallWebService();
cRImageDataListPatients=callWebService.call(“PatientIds”);
availableCRVariables=getCRVariables();
//设置SelectedImage以避免空指针异常
选择图像=新犯罪数据[0];
selectedPatients=新字符串[0];
selectedVariables=新的CRVariable[0];
试一试{
availableReviewers=getReviewers();
}捕获(PortalException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}捕获(系统异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
selectedReviewers=新用户[0];
reviewProtocolDescription=新字符串();
设置SelectedReviewerData内部(新的CRReviewerData[0]);
}
//关于保存报告表单
公共作废保存(ActionEvent ActionEvent){
字符串结果=null;
List mySelectedVariables=Arrays.asList(selectedVariables);
List mySelectedPatients=Arrays.asList(selectedPatients);
List mySelectedReviewers=Arrays.asList(selectedReviewers);
列出mySelectedReviewersInternal=转换器(mySelectedReviewers);
现在日期=新日期();
Session Session=HibernateUtil.getSessionFactory().openSession();
CRReviewProtocol reviewProtocol=新CRReviewProtocol();
reviewProtocol.setRevProtDescription(this.getReviewProtocolDescription());
回顾protocol.setCrimagedata(我选择的患者);
查看protocol.setCrvariables(mySelectedVariables);
审查协议。setcRReviewerData(MySelectedReviewerInternal);
事务tx=null;
尝试
{
tx=session.beginTransaction();
session.save(reviewProtocol);
tx.commit();
logger.debug(“新记录:+reviewProtocol+”,wasCommitted:+tx.wasCommitted());
结果=成功;
} 
捕获(例外e)
{
如果(tx!=null)
{
tx.回滚();
结果=错误;
e、 printStackTrace();
}
} 
最后
{
//session.close();
}
infoMsg(“成功”,“审查协议已成功创建!”);
对于(int j=0;j编辑:

您正在
reviewProtocol=new CRReviewProtocol();
中创建新的空对象,该变量仅在
save(ACtionEvent ACtionEvent)
方法的范围内可见

如果您从链接中看到示例中的类似内容,您应该有如下内容:

<p:inputText required="true" label="Firstname" value="#wizardMasterDetailController.user.firstname}"/>  

您必须设置
user=new user()
才能重置它。 在这种情况下,用户是一个类变量,如何调用您的类变量,这就是您必须重置的变量


请发布更多面板内容,以更好地帮助您。

通过在“保存”操作的底部设置“我选择的变量”来解决此问题,如:

...
//create an empty review protocol
ReviewWizard reviewWizard = new ReviewWizard();     
setSelectedImages(null);
setSelectedPatients(null);
setSelectedVariables(null);
setSelectedReviewers(null);
setReviewProtocolDescription(null);
currentLevel=1;
...

我知道你已经在使用一个视图范围,已经尝试过这个解决方案了吗?是的。我正在使用一个视图范围的back bean并尝试过:但是运气不好!请发布你的reviewWizard的代码,你正在从一个局部变量创建一个新的空对象,而不是从你用来保存的变量创建一个新的空对象
...
//create an empty review protocol
ReviewWizard reviewWizard = new ReviewWizard();     
setSelectedImages(null);
setSelectedPatients(null);
setSelectedVariables(null);
setSelectedReviewers(null);
setReviewProtocolDescription(null);
currentLevel=1;
...