呈现的属性不适用于请求参数

时间:2014-08-26 07:02:42

标签: jsf jsf-2 primefaces

我正在使用带有primefaces 5.0的JSF2.2。我有一个xhtml文件,其中有两个文件上传,其中一个应始终可见,而其他文件只有在名为signmethod的请求参数为JAVAME时才可见。

            <h:panelGrid>
                <h:panelGroup>
                    <h:outputLabel for="selected_signmethod" value="Selected Signethod : "/>
                    <h:outputText id="selected_signmethod" value="#{param.signmethod}" />
                </h:panelGroup>                    
                <h:panelGroup>
                    <b>Select file(s) to upload:</b>
                </h:panelGroup>                    
            </h:panelGrid>                
            <h:form id="uploadForm" enctype="multipart/form-data">
                <p:message for="file_upload"/>
                <p:fileUpload id="file_upload" allowTypes="#{fileUploadView.allowedTypes}" label="Select file" fileUploadListener="#{fileUploadView.handleFileUpload}"
                              mode="advanced" dragDropSupport="false" update="growl" multiple="true" fileLimit="5"/>
                <p:message for="javame_upload"/>

                <h:panelGroup rendered="#{param.signmethod == 'JAVAME'}" >
                    <b>Select corresponding jar file(s) to upload:</b>
                <p:fileUpload id="javame_upload" allowTypes="" label="Select Jar file for javame" fileUploadListener="#{fileUploadView.handleFileUpload}"
                              mode="advanced" dragDropSupport="false" multiple="true" fileLimit="5"/>
                </h:panelGroup>

                <p:commandButton ajax="false" id="signProceed" value="Proceed" action="#{fileUploadView.submit}"/>
            </h:form> 

但这似乎没有发生。第二个上传组件根本没有渲染。我也打印param.signmethod的值,以确保正确的值进入param.signmethod,这是正确的。那么什么阻止这个组件被渲染。

Managed Bean代码:

@ManagedBean
@ViewScoped
public class FileUploadView implements Serializable {

@ManagedProperty(value = "#{signBundleBean}")
private SignBundleBean signBundleBean;
static String uploadDirRoot = InitialisationHelper.getUploadDirRoot();
transient Map<String, Object> sessionMap;
ArrayList<Signing> signings;
String username;
SignMethod signMethod;


public FileUploadView() {
    System.out.println("NEW FileUploadView created.");
}

@PostConstruct
public void init() {
    System.out.println("@POstConstruct FileuploadView");
    System.out.println("signMethod : " + signMethod);
    sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();        
    signings = signBundleBean.getSignings();
    username = (String) sessionMap.get("username");        
}

public void handleFileUpload(FileUploadEvent e) {
    String signId = "" + DatabaseHelper.genrateSigningId();
    FacesContext ctx = FacesContext.getCurrentInstance();
    UploadedFile uploadedFile = e.getFile();
    String filename = uploadedFile.getFileName();
    if (signId.equals("-1")) {
        FacesMessage fm = new FacesMessage();
        fm.setDetail("Database Connection not working. Please try later.");
        fm.setSummary("DBConnection_Error");
        fm.setSeverity(FacesMessage.SEVERITY_ERROR);
        //ctx.addMessage(null, fm);
        ctx.addMessage("uploadForm:file_upload", fm);
        return;
    }
    if (username == null) {
        FacesMessage fm = new FacesMessage();
        fm.setDetail("You are not in session to upload.");
        fm.setSummary("Session_Error");
        fm.setSeverity(FacesMessage.SEVERITY_ERROR);
        ctx.addMessage("uploadForm:file_upload", fm);
        return;
    }

    Signing sg;
    sg = new Signing(signId, username, filename, signMethod, false);
    signings.add(sg);
    System.out.println("Signing added : " + sg);
    signBundleBean.setMaxParameters(SignParametersInitialisation.getNumberOfParameters(signMethod));

    try {
        InputStream is = uploadedFile.getInputstream();
        OutputStream os = new FileOutputStream(sg.getUploadfile());
        byte[] bytes = new byte[1024];
        int read = 0;
        while ((read = is.read(bytes)) != -1) {
            os.write(bytes, 0, read);
        }
        os.flush();
        sg.setUploaded(true);
        is.close();
        os.close();
    } catch (IOException ex) {
        signings.remove(sg);
        Logger.getLogger(FileUploadView.class.getName()).log(Level.SEVERE, null, ex);
    }
    FacesMessage fm = new FacesMessage();
    fm.setDetail(filename);
    fm.setSummary("FileUploaded");
    fm.setSeverity(FacesMessage.SEVERITY_INFO);
    //ctx.addMessage(null, fm);
    ctx.addMessage(null, fm);
    System.out.println(sg + " File uploaded to " + sg.getUploadfile());

}


}

0 个答案:

没有答案