解决方案 »

  1.   

    用一个hidden:1, 将字符串赋予给hidden
    2,调用applet方法,不带任何参数
    3,applet读取hidden值,写入文件我瞎猜的,你试试。
      

  2.   

    你需要先拿到 applet 对象:
      function getApplet(){
        if (document.applets.length > 0){
            return document.applets[0];
        }else if(document.embeds.length > 0){
            return document.embeds[0];
        }else{
            alert("<emxUtil:i18nScript localize="i18nId">emxComponents.Common.CanNotStartApplet</emxUtil:i18nScript>");
            return "";
        }
      }然后 js 中才能对 applet 中的方法进行调用:
      function next(){
        var numOfValid = <%=numOfValidFiles%>;
        if(numOfValid < 1){
          alert('There is no file valid to upload!');
          return;
        }
        var validDirs = getApplet().directoryValid('<%=directoryStr%>');
      parent.document.location = "asbEngrDocumentImportCheckinAppletsFS.jsp?xyz=xyz&validDirs=" + validDirs;
      }
      

  3.   

    谢谢您的回答。但是我有一个疑问。为什么我直接调用我的写TestBack()函数的时候就可以直接返回abc呢?
      

  4.   

    Defonds。 还有一个问题,您的第二个javacode我没看明白。 
    那个是什么意思, 第一个我看懂了。 
      

  5.   

    我第一个写完了。 我想调用 applet中的 WriteTxt函数的时候应该怎么调用?
      

  6.   

    directoryValid 是我自己封装的 applet 类里的自定义的方法,我把自定义 applet 也给你贴一下吧:
    /**
     * added by Defonds
     * @param filesInfo
     * File Name1|File Flag Public1|File Document Language1|File Description1|File Operating System1|File Store1|File Title1|File Flag Exp1
     */
    public void addFileInfomation(String filesInfo,String directoryInfo,String formatInfo){

    System.out.println("the file info str gived to applet is:" + filesInfo);
    String fileName = "",fileFlagPublic = "",fileDocomentLanguage = "",fileDescription = "",
    fileOperatingSystem = "",fileStore = "",fileTitle = "",fileFlagExp = "";

    String[] filesInfoArr = filesInfo.split("|");
    if(filesInfoArr.length > 0){
    fileName = filesInfoArr[0];
    fileFlagPublic = filesInfoArr[1];
    fileDocomentLanguage = filesInfoArr[2];
    fileDescription = filesInfoArr[3];
    fileOperatingSystem = filesInfoArr[4];
    fileStore = filesInfoArr[5];
    fileTitle = filesInfoArr[6];
    fileFlagExp = filesInfoArr[7];
    }

    java.io.File checkinFile = new java.io.File(directoryInfo);
    FileInfo file = new FileInfo(checkinFile);
    file.setFileStore(fileStore);
    file.setFormat(formatInfo);
    file.setFileFlagPublic(fileFlagPublic);
    file.setFileFlagEXP(fileFlagExp);
    file.setFileDocumentLanguage(fileDocomentLanguage);
    System.out.println("applet-filename=" + file.getFileName());

    addFile(file);
    System.out.println("a file added successfully!");
    }

    /**
     * @added by Defonds
     * @param directoryStr
     * D:/tmp/tmp/AppDevGuide1071.pdf@@@D:/tmp/tmp/AppDevGuide1072.pdf@@@...
     * @return
     * D:/tmp/tmp/AppDevGuide1071.pdf@@@D:/tmp/tmp/AppDevGuide1072.pdf...
     * @note
     * only return the directories which are valid
     */
    public synchronized String directoryValid(String directoryStr){

    System.out.println("the file directory info give to applet is:" + directoryStr);
    _fileValidStr = directoryStr;

    FileValidRunner runner = new FileValidRunner();
            AccessController.doPrivileged(runner);


    System.out.println("applet return value is:" + _fileValidStrRe);
    return _fileValidStrRe;
    }

    /**
     * @author defonds
     */
    class FileValidRunner implements PrivilegedAction { public Object run() {
    String[] direArrs = _fileValidStr.split("@@@");
    if(direArrs.length > 0){
    for(int i = 0;i < direArrs.length;i ++){
    String tmpName = direArrs[i];
    java.io.File tmpFile = new java.io.File(tmpName);
    if(tmpFile.exists()){//only return the directories which are invalid
    if(_fileValidStrRe.equals("")){//the first one
    _fileValidStrRe = tmpName;
    }else{//not the first one
    _fileValidStrRe += "@@@" + tmpFile;
    }
    }
    }
    }
    return null;
    } FileValidRunner() {
    }
    }addFileInfomation 是 js 向 applet 传递一些服务器提供的文件信息,诸如文件名(含完整的路径信息)、文件格式、文件内容语言、操作系统…
            directoryValid 是 js 调用 applet 方法,对一系列的文件路径进行验证,applet 把有效的(即本地确实存在此文件)文件路径进行返回。希望可以帮到你:)
      

  7.   

    谢谢。 我看了一下
     addFileInfomation这个函数和js上没有关系呀?  没看见什么地方调用了。 
    我现在的问题是2个函数,为什么直接返回abc的就可以调用,而且能返回值。 但是创建文件的函数就调用不了?
      

  8.   

    可以看到 applet 日志么?八成是权限问题。
    applet 操作本地磁盘,需要实现 PrivilegedAction。
    给你个例子:

    /**
     * @author defonds
     */
    class FileValidRunner implements PrivilegedAction { public Object run() {
    String[] direArrs = _fileValidStr.split("@@@");
    if(direArrs.length > 0){
    for(int i = 0;i < direArrs.length;i ++){
    String tmpName = direArrs[i];
    java.io.File tmpFile = new java.io.File(tmpName);
    if(tmpFile.exists()){//only return the directories which are invalid
    if(_fileValidStrRe.equals("")){//the first one
    _fileValidStrRe = tmpName;
    }else{//not the first one
    _fileValidStrRe += "@@@" + tmpFile;
    }
    }
    }
    }
    return null;
    } FileValidRunner() {
    }
    }
      

  9.   

    Applet加载的时候会运行 paint函数的。 这个里面我就是写的创建文件。 这个就好使。
      

  10.   

    谢谢您。 能告诉我一下这个怎么用吗? 我现在对java还是不太了解。 
      

  11.   

    http://docs.oracle.com/javase/7/docs/api/java/security/PrivilegedAction.html
      

  12.   

    你不是不带参数的applet已经能够生成并保存文件了嘛?
      

  13.   

    paint(Graphics g)加载的时候就运行这个,就生成了文件,我在本地给删掉后,调用js调用 WriteTxt(String)这个就生成不了文件,这两个函数的内容是一样的。 
      

  14.   

    谢谢大家。 这个问题解决了。 我稍后整理一下代码, 在彻底运行一下,测试一下效果看看。 如果没问题。 我把解决方案粘贴出来,给大家分享。 
    我这java代码学了3天,写着点东西,真不容易。 非常感谢大家的帮忙。
    Defonds您在我很多帖子中回复。感谢您。 这几天在您回复中的代码学到了,不少东西。 
      

  15.   


    /**
     * HTML中调用创建文件
     * **/
    public void RunWriteTxt(final String strTxt) {
    String result = AccessController
    .doPrivileged(new PrivilegedAction<String>() {
    @Override
    public String run() {
    String res = null;
    WriteTxt(strTxt);
    return res;
    }
    });
    }经过测试运行一切正常。 就是在写个函数,里面写一些代码调用创建文件的函数就可以了。