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