incubator-jspwiki-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Janne Jalkanen <Janne.Jalka...@ecyrd.com>
Subject Re: VS: Re: Upload Question
Date Sat, 11 Oct 2008 17:48:44 GMT
And could you also provide the HTML code resulting from this invocation?

/Janne

On 11 Oct 2008, at 20:37, Benedikt Mohrmann wrote:

> Hi,
>
> the plugin should be activated by a click on the button.
>
> Here is the WikiPage
>
> [{FormSet form='uploadForm'}]
> [{MyFormOpen form='uploadForm'}]
> [{FormInput type='file' name='uploadInput'}]
>
>
> [{FormInput type='submit' name='uploadFile' value='Upload'}]
> [{FormOutput form='uploadForm' handler='MyPlugin'}]
> [{FormClose}]
>
> Best regards
> Benedikt
>
>
> Janne Jalkanen schrieb:
>>
>> And how do you use this on a page?
>>
>> /Janne
>>
>> On 11 Oct 2008, at 14:52, Benedikt Mohrmann wrote:
>>
>>> Hi,
>>>
>>> the plugin is quite easy:
>>> public class MyPlugin implements WikiPlugin {
>>>
>>>    @Override
>>>    public String execute(WikiContext context, Map params) throws  
>>> PluginException {
>>>              HttpServletRequest request = context.getHttpRequest();
>>>        boolean isMultipart = ServletFileUpload.isMultipartContent 
>>> (request);
>>>              // Create a factory for disk-based file items
>>>        FileItemFactory factory = new DiskFileItemFactory();
>>>
>>>        // Create a new file upload handler
>>>        ServletFileUpload upload = new ServletFileUpload(factory);
>>>
>>>        // Parse the request
>>>        List<FileItem> items = null;
>>>        try {
>>>            items = upload.parseRequest(request);
>>>        } catch (Exception e) {
>>>            // TODO Auto-generated catch block
>>>                      return "BUG";
>>>        }
>>>              boolean empty = items.isEmpty();
>>>        String valueOf = String.valueOf(empty);
>>>
>>>
>>>        return valueOf + "Works";
>>>    }
>>> }
>>>
>>> As I said, when I hit the submitButton nothing happens.
>>>
>>> Best regards
>>> Benedikt
>>>
>>>
>>> jalkanen@ecyrd.com schrieb:
>>>> Hi!
>>>>
>>>> I think we might need to see the code. Can you post it to the  
>>>> list, please?
>>>>
>>>> /janne
>>>>
>>>> -- alkuper. viesti --
>>>> Aihe: Re: Upload Question
>>>> Lähettäjä: Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>> Päivämäärä: 11.10.2008 12:42
>>>>
>>>> Hi,
>>>>
>>>> I did all this.
>>>> The HTML output is how it should be, but the request is not  
>>>> handled when I hit the button.
>>>>
>>>> The WikiSite:
>>>> [{FormSet form='uploadForm'}]
>>>> [{MyFormOpen form='uploadForm'}]
>>>> [{FormInput type='file' name='uploadInput'}]
>>>>
>>>>
>>>> [{FormInput type='submit' name='uploadFile' value='Upload'}]
>>>> [{FormOutput form='uploadForm' handler='MyPlugin'}]
>>>> [{FormClose}]
>>>>
>>>> To test it I wrote a plugin which justs returns "Works".
>>>> Now when I switch to the normal FormOpen tag ([{FormOpen  
>>>> form='uploadForm'}]) the output is "Works".
>>>> When I use my own one, there is no output.
>>>>
>>>> Any ideas, why this is not handled?
>>>>
>>>> Best regards
>>>> Benedikt
>>>>
>>>>
>>>> Janne Jalkanen schrieb:
>>>>
>>>>> They are real plugins.
>>>>>
>>>>> I recommend that you copy FormOpen.java to MyFormOpen.java,  
>>>>> rename the class, change the code, and then use [{MyFormOpen}]  
>>>>> instead of [{FormOpen}] in the plugins that you need.
>>>>>
>>>>> You can easily write your own plugin which does what you said:
>>>>>
>>>>> package whatever.package.you.use;
>>>>>
>>>>> public class MyPlugin implements WikiPlugin
>>>>> {
>>>>>    public String execute(WikiContext ctx, Map params)
>>>>>    {
>>>>>           returnStringBuffer.append("<div class=\"wikiform\">");
>>>>>           returnStringBuffer.append("<form action=\"Wiki.jsp? 
>>>>> page=MyTest\" name=\"uploadForm\" accept-charset=\"UTF-8\"  
>>>>> method=\"post\"                   enctype=\"multipart/form-data 
>>>>> \">");
>>>>>        returnStringBuffer.append("<input type=\"hidden\" name= 
>>>>> \"formname\" value=\"uploadForm\"/>");
>>>>>        returnStringBuffer.append("<input name=\"nbf_Datei\"  
>>>>> type=\"file\"><input type=\"submit\" name=\"nbf_upload\" id= 
>>>>> \"upload\" value=\"Hochladen\" />");
>>>>>
>>>>>       return returnStringBuffer.toString();
>>>>>     }
>>>>> }
>>>>>
>>>>> then use [{whatever.package.you.use.MyPlugin}] on a wikipage.   
>>>>> I don't know what it does, but it is easy :-)
>>>>>
>>>>> /Janne
>>>>>
>>>>> On Oct 10, 2008, at 16:16 , Benedikt Mohrmann wrote:
>>>>>
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> the problem is that the Forms are directly in the JSPWiki.jar  
>>>>>> file.
>>>>>> Thus they are no real plugins I guess.
>>>>>> I tried to change the FormOpen.java and inserted
>>>>>>        tag.append( "\" method=\""+method+"\" enctype= 
>>>>>> \"multipart/form-data\">\n" );
>>>>>> then build the class file and just put it into the JSPWiki.jar.
>>>>>>
>>>>>> As a result all the other plugins which use forms were not  
>>>>>> working correctly (that was of course clear).
>>>>>> But my Upload Plugin did not work, too.
>>>>>> When I hit the submit button nothing happened.
>>>>>>
>>>>>> Is there no possibility to insert a plugin which creates HTML  
>>>>>> code the following way:
>>>>>>        returnStringBuffer.append("<div class=\"wikiform\">");
>>>>>>        returnStringBuffer.append("<form action=\"Wiki.jsp? 
>>>>>> page=MyTest\" name=\"uploadForm\" accept-charset=\"UTF-8\"  
>>>>>> method=\"post\" enctype=\"multipart/form-data\">");
>>>>>>        returnStringBuffer.append("<input type=\"hidden\" name=

>>>>>> \"formname\" value=\"uploadForm\"/>");
>>>>>>        returnStringBuffer.append("<input name=\"nbf_Datei\"  
>>>>>> type=\"file\"><input type=\"submit\" name=\"nbf_upload\" id=

>>>>>> \"upload\" value=\"Hochladen\" />");
>>>>>>
>>>>>> Then just integrate the plugin into the WikiPage.
>>>>>>
>>>>>> And then put a second plugin via [{FormOutput  
>>>>>> form='uploadForm' handler='MyPlugin'}] into the WikiPage?
>>>>>>
>>>>>> At the moment this seems not to work, as nothing happens when  
>>>>>> I click on the submit button.
>>>>>>
>>>>>> Best regards
>>>>>> Benedikt
>>>>>>
>>>>>>
>>>>>> Janne Jalkanen schrieb:
>>>>>>
>>>>>>> Probably the quickest way for you now is to simply make a  
>>>>>>> copy of the
>>>>>>> relevant Form plugin, name it something else, and just change
 
>>>>>>> the
>>>>>>> enctype.
>>>>>>>
>>>>>>> Also please put in a JIRA request for the enctype to be  
>>>>>>> changeable,
>>>>>>> and we'll snatch it in either 2.8.1 or 3.0.
>>>>>>>
>>>>>>> /Janne
>>>>>>>
>>>>>>> On Fri, Oct 10, 2008 at 10:50:32AM +0200, Benedikt Mohrmann 

>>>>>>> wrote:
>>>>>>>
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> just checked it again.
>>>>>>>> The problem is definetely the form:
>>>>>>>> org.apache.commons.fileupload.FileUploadBase 
>>>>>>>> $InvalidContentTypeException: the request doesn't contain
a  
>>>>>>>> multipart/form-data or multipart/mixed stream, content type
 
>>>>>>>> header is application/x-www-form-urlencoded
>>>>>>>>
>>>>>>>> Pretty bad that you can not change the enctype.
>>>>>>>> In the Wiki Src it is:
>>>>>>>> tag.append( "\" method=\""+method+"\" enctype=\"application/

>>>>>>>> x-www-form-urlencoded\">\n" );
>>>>>>>>
>>>>>>>> Can't I just change this?
>>>>>>>>
>>>>>>>> Another way could be to write a plugin with the following
 
>>>>>>>> code (snippet):
>>>>>>>>        returnStringBuffer.append("<div class=\"wikiform\">");
>>>>>>>>        returnStringBuffer.append("<form action=\"Wiki.jsp?

>>>>>>>> page=MyTest\" name=\"uploadForm\" accept-charset=\"UTF-8\"
 
>>>>>>>> method=\"post\" enctype=\"multipart/form-data\">");
>>>>>>>>        returnStringBuffer.append("<input type=\"hidden\"
 
>>>>>>>> name=\"formname\" value=\"uploadForm\"/>");
>>>>>>>>        returnStringBuffer.append("<input name=\"nbz_Datei\"
 
>>>>>>>> type=\"file\"><input type=\"submit\" name=\"nbz_upload\"
id= 
>>>>>>>> \"upload\" value=\"Hochladen\" />");
>>>>>>>>        returnStringBuffer.append("</form></div>");
>>>>>>>>
>>>>>>>> This would create a form, but how can I tell the Wiki which
 
>>>>>>>> plugin to use, when the button is hit?
>>>>>>>>
>>>>>>>> Regards
>>>>>>>> Benedikt
>>>>>>>>
>>>>>>>>
>>>>>>>> Janne Jalkanen schrieb:
>>>>>>>>
>>>>>>>>
>>>>>>>>> I think it is important to look into the cause... The
stack  
>>>>>>>>> trace would be important, yes.  There could be many things
 
>>>>>>>>> failing.
>>>>>>>>>
>>>>>>>>> /Janne
>>>>>>>>>
>>>>>>>>> On Oct 9, 2008, at 19:15 , Harry Metske wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> I think so too (multipart/form-data), but can you
print  
>>>>>>>>>> the stacktrace just
>>>>>>>>>> before returning " BUG" , maybe you'll get a clue
then ?
>>>>>>>>>>
>>>>>>>>>> The FormOpen class currently has a hardcoded
>>>>>>>>>> "application/x-www-form-urlencoded", I think this
should  
>>>>>>>>>> be parameterizable
>>>>>>>>>> with the current value as the default.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> regards,
>>>>>>>>>> Harry
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> 2008/10/9 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>>
>>>>>>>>>>> I tried a few things already, but did not get
it to work  
>>>>>>>>>>> so far.
>>>>>>>>>>>
>>>>>>>>>>> At first I created a new site, which contains:
>>>>>>>>>>> [{FormSet form='searchForm'}]
>>>>>>>>>>> [{FormOpen form='searchForm'}]
>>>>>>>>>>> [{FormInput type='file' name='searchInput'}]
>>>>>>>>>>>
>>>>>>>>>>> [{FormInput type='submit' name='submit' value='Submit'}]
>>>>>>>>>>> [{FormClose}]
>>>>>>>>>>> [{FormOutput form='searchForm' handler='MyTest2'}]
>>>>>>>>>>>
>>>>>>>>>>> Thus there is only a form where you can upload
your data.
>>>>>>>>>>>
>>>>>>>>>>> The Plugin contains the following code (at this
time  
>>>>>>>>>>> really simple, just to
>>>>>>>>>>> check if it works):
>>>>>>>>>>> public class MyTest2 implements WikiPlugin {
>>>>>>>>>>>
>>>>>>>>>>>  @Override
>>>>>>>>>>>  public String execute(WikiContext context, Map
params)  
>>>>>>>>>>> throws
>>>>>>>>>>> PluginException {
>>>>>>>>>>>            HttpServletRequest request =  
>>>>>>>>>>> context.getHttpRequest();
>>>>>>>>>>>      boolean isMultipart =  
>>>>>>>>>>> ServletFileUpload.isMultipartContent(request);
>>>>>>>>>>>            // Create a factory for disk-based
file items
>>>>>>>>>>>      FileItemFactory factory = new DiskFileItemFactory();
>>>>>>>>>>>
>>>>>>>>>>>      // Create a new file upload handler
>>>>>>>>>>>      ServletFileUpload upload = new ServletFileUpload

>>>>>>>>>>> (factory);
>>>>>>>>>>>
>>>>>>>>>>>      // Parse the request
>>>>>>>>>>>      List<FileItem> items = null;
>>>>>>>>>>>      try {
>>>>>>>>>>>          items = upload.parseRequest(request);
>>>>>>>>>>>      } catch (Exception e) {
>>>>>>>>>>>          // TODO Auto-generated catch block
>>>>>>>>>>>          return "BUG";
>>>>>>>>>>>      }
>>>>>>>>>>>      return "Works";
>>>>>>>>>>>  }
>>>>>>>>>>> }
>>>>>>>>>>>
>>>>>>>>>>> So far I always get the "BUG" output when I choose
a file  
>>>>>>>>>>> and hit the
>>>>>>>>>>> submitbutton.
>>>>>>>>>>> One problem could be that when I take a look
at the  
>>>>>>>>>>> produced HTML code, the
>>>>>>>>>>> form is introduced with:
>>>>>>>>>>>
>>>>>>>>>>> <form action="Wiki.jsp?page=MyTest" name="searchForm"
>>>>>>>>>>> accept-charset="UTF-8" method="post"
>>>>>>>>>>> enctype="application/x-www-form-urlencoded">
>>>>>>>>>>>
>>>>>>>>>>> I think it should be the enctype: multipart/form-data
>>>>>>>>>>> But I don't know if that is the point.
>>>>>>>>>>>
>>>>>>>>>>> Any other ideas?
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Best regards
>>>>>>>>>>> Benedikt
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Harry Metske schrieb:
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> my previous answer was a bit too much in
a hurry....
>>>>>>>>>>>>
>>>>>>>>>>>> first your compile, Eclipse tells you there
is no method  
>>>>>>>>>>>> getHttpRequest
>>>>>>>>>>>> for
>>>>>>>>>>>> a wiki context, that is strange, looking
at the source  
>>>>>>>>>>>> it does have it :
>>>>>>>>>>>>
>>>>>>>>>>>> ........
>>>>>>>>>>>>   /**
>>>>>>>>>>>>    *  If the request did originate from a
HTTP request,
>>>>>>>>>>>>    *  then the HTTP request can be fetched
here.   
>>>>>>>>>>>> However, it the request
>>>>>>>>>>>>    *  did NOT originate from a HTTP request,
then this  
>>>>>>>>>>>> method will
>>>>>>>>>>>>    *  return null, and YOU SHOULD CHECK FOR
IT!
>>>>>>>>>>>>    *
>>>>>>>>>>>>    *  @return Null, if no HTTP request was
done.
>>>>>>>>>>>>    *  @since 2.0.13.
>>>>>>>>>>>>    */
>>>>>>>>>>>>   public HttpServletRequest getHttpRequest()
>>>>>>>>>>>>   {
>>>>>>>>>>>>       return m_request;
>>>>>>>>>>>>   }
>>>>>>>>>>>> .......
>>>>>>>>>>>>
>>>>>>>>>>>> and if you can't compile it, I shouldn't
even try to run  
>>>>>>>>>>>> it.
>>>>>>>>>>>> Maybe you can reply the complete source of
your plugin ?
>>>>>>>>>>>>
>>>>>>>>>>>> regards,
>>>>>>>>>>>> Harry
>>>>>>>>>>>>
>>>>>>>>>>>> 2008/10/8 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>
>>>>>>>>>>>>> thanks for your answer- I already had
a look at commons  
>>>>>>>>>>>>> fileupload.
>>>>>>>>>>>>> But the problem is, when I use:
>>>>>>>>>>>>>
>>>>>>>>>>>>> HttpServletRequest request = context.getHttpRequest();
>>>>>>>>>>>>>
>>>>>>>>>>>>> JSPWiki tells me
>>>>>>>>>>>>>
>>>>>>>>>>>>> HttpServletRequest cannot be resolved
to a type
>>>>>>>>>>>>> The type javax.servlet.http.HttpServletRequest
cannot  
>>>>>>>>>>>>> be resolved.
>>>>>>>>>>>>>
>>>>>>>>>>>>> In addition I am implementing my plugin
in Eclipse and  
>>>>>>>>>>>>> it tells me that
>>>>>>>>>>>>> there is no method getHttpRequest for
a wiki context.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Best regards
>>>>>>>>>>>>> Benedikt
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Harry Metske schrieb:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Benedikt,
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> in your plugin you have access to
the  
>>>>>>>>>>>>>> HttpServletRequest (
>>>>>>>>>>>>>> HttpServletRequest request = context.getHttpRequest

>>>>>>>>>>>>>> (); ) .
>>>>>>>>>>>>>> Once you have this, I think you can
use many samples/ 
>>>>>>>>>>>>>> tools to handle the
>>>>>>>>>>>>>> uploaded file, but maybe the best
one is commons  
>>>>>>>>>>>>>> fileupload (
>>>>>>>>>>>>>> http://commons.apache.org/fileupload/using.html),
this  
>>>>>>>>>>>>>> binary jar is
>>>>>>>>>>>>>> already
>>>>>>>>>>>>>> in the JSPWiki distribution.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> regards,
>>>>>>>>>>>>>> Harry
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 2008/10/7 Benedikt Mohrmann <mohrmann@mail.upb.de>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> my intention is to upload a file
via JSPWiki, but not  
>>>>>>>>>>>>>>> as an attachment.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I am trying to upload a file,
thus I created a form  
>>>>>>>>>>>>>>> containing a file
>>>>>>>>>>>>>>> chooser and a submitbutton.
>>>>>>>>>>>>>>> The goal is, that the input file
is transferred to  
>>>>>>>>>>>>>>> the server and then
>>>>>>>>>>>>>>> handled by a plugin I wrote.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> The plugin just puts the file
as a Serializable into  
>>>>>>>>>>>>>>> a database (which
>>>>>>>>>>>>>>> already works, when I read a
file from my harddisk).
>>>>>>>>>>>>>>> But I am not yet not able to
transfer the content of  
>>>>>>>>>>>>>>> the file as a
>>>>>>>>>>>>>>> stream
>>>>>>>>>>>>>>> or something like that.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Any experiences how this could
work?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Best regards
>>>>>>>>>>>>>>> Benedikt
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>
>>>>
>>


Mime
View raw message