Hi,
thanks for the answer.
Now I did the following:
First of all I modified my plugin, which creates me my uploadform:
returnStringBuffer.append("<div class=\"wikiform\">");
returnStringBuffer.append("<form action=\"MyServlet\"
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_uploadInput\"
type=\"file\" value=\"\" /><input type=\"submit\"
name=\"nbf_uploadFile\" id=\"upload\" value=\"Hochladen\" />");
returnStringBuffer.append("</form></div>");
return returnStringBuffer.toString();
Then I wrote a servlet called MyServlet and created a .jar file of it.
I put this jar file in the "classes" directory of the JSPWiki and
modiefied the web.xml the following way:
Added:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
Now when I hit the submitbutton I get navigated to the page:
http://localhost:8080/JSPWiki/MyServlet
which seems to be wrong.
In addition I got the following error message on this page:
HTTP Status 405 - HTTP method POST is not supported by this URL
------------------------------------------------------------------------
*type* Status report
*message* _HTTP method POST is not supported by this URL_
*description* _The specified HTTP method is not allowed for the
requested resource (HTTP method POST is not supported by this URL).
_
What am I doing wrong so far?
Best regards
Benedikt
Janne Jalkanen schrieb:
Ah yes, found the answer from the FAQ:
"Why is parseRequest() returning no items?
This most commonly happens when the request has already been
parsed, or processed in some other way. Since the input stream has
aleady been consumed by that earlier process, it is no longer
available for parsing by Commons FileUpload. "
Therefore, since JSPWiki has already parsed the request (e.g. by using
request.getParameter()), FileUpload can no longer parse the request
and therefore fails. There is no way around this in a Plugin, I'm
afraid...
The only option is probably to create your own Servlet and send the
request there. Look how AttachmentServlet handles things, that should
help you to construct your own Servlet to handle your own upload. If
you want to use WikiForms, you can use the "submit" -parameter of
FormOpen to point at your own servlet.
/Janne
On Oct 14, 2008, at 16:41 , Benedikt Mohrmann wrote:
Hi,
I just tried another thing.
I wrote a second plugin which contains the following code:
StringBuffer returnStringBuffer = new StringBuffer();
@Override
public String execute(WikiContext context, Map params) throws
PluginException {
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_uploadInput\"
type=\"file\" value=\"\" /><input type=\"submit\"
name=\"nbf_uploadFile\" id=\"upload\" value=\"Hochladen\" />");
returnStringBuffer.append("</form></div>");
return returnStringBuffer.toString();
}
}
I integrated the plugin into a WikiPage and in addition the following:
[{FormOutput form='uploadForm' handler='MyPlugin'}]
When I hit the button there happens nothing again.
Now when I change the sourcecode an write
enctype=\"application/x-www-form-urlencoded\">" instead of
enctype=\"multipart/form-data\">"
everything works fine again.
Something is definetely not able to handle the other format.
Any ideas?
Best regards
Benedikt
Benedikt Mohrmann schrieb:
Hi,
I definetely know that it is a problem with the MyFormOpenPlugin!!!
No plugin gets activated, when I use the MyFormOpenPlugin.
I just copied the FormOpen Plugin and changed the one line to get a
"multipart/form-data".
In addition I deleted the following:
private static org.apache.log4j.Logger log =
org.apache.log4j.Logger.getLogger( MyFormOpen.class );
log.debug( "Previous FormInfo for this form was found in context." );
But I don`t think that this can be the problem.
Is there any other way to get out of this mysery?
Best regards
Benedikt
Benedikt Mohrmann schrieb:
Hi,
does anyone have a clue, how to solve this problem?
Best regards
Benedikt
Benedikt Mohrmann schrieb:
Hi,
here is the resulting HTML code:
<div class="wikiform">
<form action="Wiki.jsp?page=MyTest" name="uploadForm"
accept-charset="UTF-8" method="post" enctype="multipart/form-data">
<input type="hidden" name="formname" value="uploadForm"/>
<input name='nbf_uploadInput' type='file' value=''/>
</p>
<p />
<p><input name='nbf_uploadFile' type='submit' value='Upload'/>
</form>
</div>
Regards
Benedikt
Janne Jalkanen schrieb:
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
[EMAIL PROTECTED] 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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>
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