Duvida em uma logica criada Inserir e Atualizar Registro - JSP

estou seguindo a apostila da Caelum e estou na parte de CRUD, estou tentando implementar uma lógica que registra um nova Tarefa e atualiza uma nova Tarefa. Já consegui registrar uma Nova Tarefa. e atualizar tarefa. Ou seja, após eu conseguir atualizar uma nova não estou conseguindo mais salvar uma nova Tarefa, Segue meu codigo.

O problema é que esta sendo enviado isso na hora que for uma nova Tarefa
<input type="hidden" name="id" value="${tarefa.id}">

No caso aparece : NumberFormatException: For input string: “”

como resolver isso

<c:import url="/WEB-INF/jsp/template/cabecalho.jsp" />

<article>
	<fieldset>
		<legend> 
			<c:if test="${tarefa.id != null}">
				ALTERANDO TAREFA ${tarefa.id}
			</c:if>
			<c:if test="${tarefa.id == null}">
				CADASTRANDO NOVA TAREFA
			</c:if> 
		</legend>
		  <form action="mvc?logica=AdicionaAlteraTarefaLogic" method="post">
		  	<input type="hidden" name="id" value="${tarefa.id}">
			Titulo: <input type="text" name="titulo" value="${tarefa.titulo != null ? tarefa.titulo : ''}"> <br />
			Descricao: <textarea rows="4" cols="20" name="descricao" maxlength="200"> ${tarefa.descricao != null ? tarefa.descricao : ""}</textarea><br />
			Data:	<geraData:campoData id="data" /> <br />
			Status: <select name="situacao">
						<c:forEach items="${situacoes}" var="s">
							<option value="${s.situacao}">${s.situacao}</option>
						</c:forEach>
					</select><br />
			<input type="submit" value="Gravar">
		  </form>
	</fieldset>
</article>
<c:import url="/WEB-INF/jsp/template/rodape.jsp" />

Logica

public class AdicionaAlteraTarefaLogic implements Logica {

@Override
public String executa(HttpServletRequest request, HttpServletResponse response) throws Exception {


	Usuario usuarioLogado = (Usuario) request.getSession().getAttribute("usuarioLogado");
	if(usuarioLogado != null){
		Connection connection = (Connection) request.getAttribute("connection");
		Calendar dataTarefa = Calendar.getInstance();
		TarefaDAO tarefaDAO = new TarefaDAO(connection);

		String id = request.getParameter("id");
		String titulo = request.getParameter("titulo");
		String descricao = request.getParameter("descricao");
		String data = request.getParameter("data");
		String situacao = request.getParameter("situacao");

		converteStringParaDate(dataTarefa, data);

		Tarefa tarefa = criaTarefa(titulo, descricao, situacao,dataTarefa, usuarioLogado);

		if(id != null){
			tarefa.setId(Integer.parseInt(id));
			tarefaDAO.atualizaTarefa(tarefa);
			return "mvc?logica=ListarTarefaLogic";
		}else if(id == null){
			tarefaDAO.adicionarTarefa(tarefa);
			return "mvc?logica=AdicionaTarefa";
		}
	}
	return "login.jsp";
}

private Tarefa criaTarefa(String titulo, String descricao, String situacao,Calendar dataTarefa, Usuario usuarioLogado) {
	Tarefa tarefa = new Tarefa();
	tarefa.setTitulo(titulo);
	tarefa.setDescricao(descricao);
	tarefa.setData(dataTarefa);
	tarefa.setSituacao(ConverterStringPorEnum.converterSituacao(situacao));
	tarefa.setIdUsuario(usuarioLogado.getId());
	return tarefa;
}

private void converteStringParaDate(Calendar dataTarefa, String data) throws ParseException {
	Date dataConvertida = new SimpleDateFormat("dd/MM/yyyy").parse(data);
	dataTarefa.setTime(dataConvertida);
}

}