In response to Russell's post on IDE's, I figured I'd give my opinion. I hate IDE's - for the past couple of years, I could never bring myself to use one for a few reasons (1) too slow, (2) I liked HomeSite too much and it worked for all my Java dev needs, and (3) I didn't like the UI's - not pretty enough for me. Granted, most of these are bad reasons, but we're allowed our opinions right? But with Eclipse 2.0, it's given me enough value-add that I now use it everyday, over IDEA and Sun ONE Studio 4 (a.k.a Forte for Java). It's still slower than HomeSite, but I really like it's look and it does everything I need (although I still use Ant to compile/deploy).
If you're using form-based authentication in your Tomcat Application - you might've seen this error before:
Apache Tomcat/4.0.4 - HTTP Status 400 - Invalid direct reference to form login page
type: Status report
message: Invalid direct reference to form login page
description: The request sent by the client was syntactically incorrect (Invalid direct reference to form login page).
Well, the good news is - I figured out how to get around this today. Basically, it's caused when someone tried to go directly to your <form-login-page> to login, rather than a protected resource.
I use my index.jsp (welcome-file-list) page to do a redirect to a projected resource:
index.jsp
--------
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<logic:redirect page="/do/mainMenu"/%gt;
So I merely added the error-page declaration below to my web.xml, and whalla - no more error message!
<error-page>
<!-- 400 code is from trying to go directly to login.jsp -->
<error-code>400</error-code>
<location>/index.jsp</location>
</error-page>
I used this code on my project yesterday and thought I'd share.
<script language="text/javascript">
function addActionToForm() {
// get the form to add the input element to
var form = document.getElementById("noteForm");
// Add a action input element
var action = document.createElement("input");
action.setAttribute("type", "hidden");
action.setAttribute("name", "action");
action.setAttribute("id", "action");
action.setAttribute("value", "Save");
form.appendChild(action);
form.submit();
}
</script>
This works great for me when I want to simulate a button named "action" being clicked, but I want to submit the form with JavaScript.
Hmmm, doesn't seem to work in IE5/Mac. Any tips?