2010-12-07 73 views
1

我试图创建一个页面,使用rich:fileUpload,来(令人惊讶地)上传图像,一旦上传完成我想隐藏rich:fileUpload组件并显示jQuery插件jCrop使图像在保存前可以被裁剪。一旦图像从所选作物中保存,这两个组件应该再次切换其可见性。不能'隐藏'丰富:fileUpload

但是,我似乎不能得到富:fileUpload'隐藏'。 jCrop组件显示正常,就像jCrop功能一样。但无论我尝试多么丰富:fileUpload仍然显示在屏幕上。实际上,如果我将rendered="#{!uploadAndCrop.newImage}"添加到rich:fileUpload所在的rich:面板中,似乎没有更新。我必须删除这个jCrop组件才能出现。

我的代码如下,这是一个有点混乱,因为我尝试了很多不同的东西。如果有人能够用正确的方向指出我的意见,或者建议采取更好的方式,我将非常感激。

感谢

<ui:define name="head"> 
    <link href="stylesheet/jquery.Jcrop.css" rel="stylesheet" 
     type="text/css" /> 

    <script type="text/javascript" src="scripts/jquery-1.4.4.min.js"></script> 
    <script type="text/javascript" src="scripts/jquery.Jcrop.js"></script> 

    <script language="Javascript">// <![CDATA[ // 
    {  
     var $J = jQuery.noConflict(); 
    } 
    //]]> //</script> 


</ui:define> 

<ui:define name="body"> 
    <h:form> 
     <h:panelGrid columns="2" columnClasses="top,top"> 

      <h:panelGroup id="uploadgroup"> 
       <a4j:outputPanel id="uploadpanel"> 
        <rich:panel rendered="#{!uploadAndCrop.newImage}"> 
         <rich:fileUpload fileUploadListener="#{uploadAndCrop.listener}" 
          maxFilesQuantity="#{uploadAndCrop.uploadsAvailable}" id="upload" 
          immediateUpload="#{uploadAndCrop.autoUpload}" 
          acceptedTypes="jpg, gif, png, bmp" 
          allowFlash="#{uploadAndCrop.useFlash}" listHeight="80px"> 
          <ui:remove> 
           onfileuploadcomplete="Richfaces.showModalPanel('croppanel');"> 
          </ui:remove> 
          <a4j:support event="onuploadcomplete" 
           reRender="info, uploadgroup, cropgroup" /> 
         </rich:fileUpload> 
         <h:outputText value="#{uploadAndCrop.newImage}" id="newimage" /> 
         <a onclick="Richfaces.showModalPanel('croppanel');" href="#">Show 
         ModalPanel</a> 
        </rich:panel> 
       </a4j:outputPanel> 
      </h:panelGroup> 



      <h:panelGroup id="info"> 
       <rich:panel bodyClass="info" rendered="#{!uploadAndCrop.newImage}"> 
        <f:facet name="header"> 
         <h:outputText value="Uploaded Image Preview" /> 
        </f:facet> 

        <rich:dataGrid columns="1" value="#{uploadAndCrop.files}" 
         var="file" rowKeyVar="row"> 
         <rich:panel bodyClass="rich-laguna-panel-no-header"> 
          <h:panelGrid columns="2"> 
           <a4j:mediaOutput element="img" mimeType="#{file.mime}" 
            createContent="#{uploadAndCrop.paint}" value="#{row}" 
            style="width:156x; height:71px;" cacheable="false"> 
            <f:param value="#{uploadAndCrop.timeStamp}" name="time" /> 
            <s:conversationId /> 
           </a4j:mediaOutput> 

          </h:panelGrid> 
         </rich:panel> 
        </rich:dataGrid> 
       </rich:panel> 
       <rich:spacer height="3" /> 
       <br /> 
       <a4j:commandButton action="#{uploadAndCrop.clearUploadData}" 
        reRender="info, upload" value="Clear Uploaded Image" /> 
      </h:panelGroup> 


      <h:panelGroup id="cropgroup"> 
       <rich:panel rendered="#{uploadAndCrop.newImage}"> 
        <f:facet name="header"> 
         <h:outputText value="Crop Image" /> 
        </f:facet> 
        <a4j:outputPanel id="crop" layout="inline"> 
         <rich:jQuery selector="#cropbox" timing="immediate" 
          query="Jcrop()" /> 
         <a4j:mediaOutput element="img" 
          mimeType="#{uploadAndCrop.tempImageStore.mime}" id="cropbox" 
          createContent="#{uploadAndCrop.paintCrop}" value="null" 
          style="width:312; height:142px;" cacheable="false"> 
          <f:param value="#{uploadAndCrop.timeStamp}" name="time" /> 
          <s:conversationId /> 
         </a4j:mediaOutput> 
         <rich:spacer height="3" /> 
         <br /> 
         <a4j:commandButton action="#{uploadAndCrop.clearUploadData}" 
          reRender="info, upload" value="Crop" /> 
        </a4j:outputPanel> 
       </rich:panel> 
      </h:panelGroup> 


     </h:panelGrid> 

     <h:commandButton id="save" value="Save" 
      action="#{uploadAndCrop.save}"> 
      <f:param name="cmsCompanyIdCom" value="" /> 
     </h:commandButton> 
     <s:button id="cancelEdit" value="Cancel" propagation="end" 
      view="/CmsCompany.xhtml"> 
      <f:param name="cmsCompanyIdCom" value="" /> 
     </s:button> 
    </h:form> 

    <ui:remove> 
     <rich:modalPanel id="croppanel" width="350" height="240"> 
      <f:facet name="header"> 
       <h:panelGroup> 
        <h:outputText value="Crop Image"></h:outputText> 
       </h:panelGroup> 
      </f:facet> 
      <f:facet name="image"> 
       <ui:remove> 
        <h:panelGroup> 
         <h:outputText value="close" /> 
         <rich:componentControl for="croppanel" attachTo="close" 
          operation="hide" event="onclick" /> 
        </h:panelGroup> 
       </ui:remove> 
      </f:facet> 

      <rich:panel rendered="#{uploadAndCrop.newImage}"> 
       <ui:remove> 
        <f:facet name="header"> 
         <h:outputText value="Crop Image" /> 
        </f:facet> 
       </ui:remove> 
       <a4j:outputPanel id="crop" layout="inline"> 

        <a4j:mediaOutput element="img" 
         mimeType="#{uploadAndCrop.tempImageStore.mime}" id="cropbox" 
         createContent="#{uploadAndCrop.paintCrop}" value="null" 
         style="width:312; height:142px;" cacheable="false"> 
         <f:param value="#{uploadAndCrop.timeStamp}" name="time" /> 
         <s:conversationId /> 
        </a4j:mediaOutput> 


        <ui:remove> 
         <rich:spacer height="3" /> 
         <br /> 
         <a4j:commandButton action="#{uploadAndCrop.clearUploadData}" 
          reRender="info, upload" value="Crop" /> 
        </ui:remove> 
       </a4j:outputPanel> 
      </rich:panel> 

      <a onclick="Richfaces.hideModalPanel('croppanel');" href="#">Hide 
      ModalPanel</a> 
     </rich:modalPanel> 
    </ui:remove> 

</ui:define> 

+0

为什么你不能只使用在文件上传它的自我呈现? – 2010-12-07 20:59:09

+0

我试过了,那也不管用。它只是做同样的...文件上传,fileUpload显示上传的文件名,但没有任何reRendered。它就像是某个地方正在抛出一个错误,停止进一步的执行并且没有输出'堆栈跟踪'。 – user533567 2010-12-08 09:21:30

回答

2

我不知道如何为你的uploadAndCrop.newImage方法,但你可以只使用一个布尔值,并将其设置为false在fileUploadListener。

但reRender的<a4j:outputPanel id="uploadpanel">,而不是<rich:fileUpload>或组。

<a4j:outputPanel id="uploadpanel" rendered="#{bean.fileUpRendered}"> 
    (...) 

    <rich:fileUpload... 
     <a4j:support event="onuploadcomplete" 
          reRender="info, uploadpanel, cropgroup" /> 
    </rich:fileUpload> 

    (...) 
</a4j:outputPanel> 

豆:

Boolean fileUpRendered; 

(...) 

public void listener(UploadEvent event) throws Exception { 
    try { 
     (...) 

     fileUpRendered = false; 
    catch (...) { (...) } 

} 

//Get set 
public get/set fileUpRendered() { }...