2012-02-26 12 views
1

私はできる限り明確に問題を説明するためにコードを要点に凝縮しました。ロジック:期待通りに動作していない

私はフォーマットがうまくいくことを願っています - これは私の最初の投稿であり、私が何をしたとしても4スペースをインデントしたり、Ctrl-Kを使用したりしています。

私のaddAssignment.jspは、LinkedListを空にしなければならない場合、 "Messages"というヘッダーを表示しています。 LinkedListにメッセージがない場合、header:Messagesの印刷を排除するためにlogic:presentタグが必要です。 LinkedListにメッセージがない場合、ヘッダー "Messages"が印刷されないようにするにはどうすればよいですか?

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
    <title>Add Assignment Page</title> 
    <style type="text/css">table { margin-left:5%; }</style> 
</head> 
<body> 
    <table> 
    <tr> 
     <td> 
     <logic:present name="messages"> 
      <h3>Messages:</h3> 
      <logic:iterate id="msg" name="messages"> 
      <bean:write name="msg" /><br /> 
      </logic:iterate> 
     </logic:present> 
     </td> 
    </tr> 
    </table> 
    <table> 
    <tr> 
     <td> 
     <H1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Add Assignment</H1> 
     </td> 
    </tr> 
    </table> 
    <html:form action="addAssignmentAction" focus="injuredWorkersFirstName"> 
    <table> 
     <tr> 
     <td>First name</td> 
     <td>&nbsp;&nbsp;&nbsp; 
      <html:text property="injuredWorkersFirstName" /> 
     </td> 
     </tr> 
     <tr> 
     <td class="100PixCentered">&nbsp;</td> 
     <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
      &nbsp;&nbsp;&nbsp;&nbsp;<html:submit>submit</html:submit> 
     </td> 
     </tr> 
    </table> 
    </html:form> 
</body> 
</html> 

LoginActionファイルは、LinkedListの使用方法を示しています。また、LoginActionはLogin.jspページ、LinkedListタグ、Logicタグ、Beanタグで正しく機能します。つまり、エラー・メッセージがLinkedListに存在した場合、Login.jspページはヘッダー・メッセージの下にそれらを確実に示しました。

public class LoginAction extends Action { 

    public void execute(Object data) { } 

    public ActionForward execute(ActionMapping mapping, ActionForm form, 
      HttpServletRequest request, HttpServletResponse response) throws Exception { 

     LinkedList messages = new LinkedList(); 
     String returnValue = "success"; 

     if ((((LoginForm) form).getName() == null) 
       || ((((LoginForm) form).getName()).length() == 0)) { 
      messages.add("bad name"); 
      returnValue = "error"; 
     } 

     if ((((LoginForm) form).getPassword() == null) 
       || ((((LoginForm) form).getPassword()).length() == 0)) { 
      messages.add("bad password"); 
      returnValue = "error"; 
     } 

     request.setAttribute("messages", messages); 
     return mapping.findForward(returnValue); 
    } 
} 

Strutsの設定:

<struts-config> 
    <data-sources></data-sources> 
    <!-- ========== Form Bean Definitions =================================== --> 
    <form-beans> 
    <form-bean name="loginForm" type="package1.LoginForm" /> 
    <form-bean name="AddAssignmentForm" type="package1.AddAssignmentForm" /> 
    </form-beans> 
    <!-- ========== Action Mapping Definitions ============================== --> 
    <!-- Action Mappings Configuration --> 
    <action-mappings> 
    <action path="/login" type="package1.LoginAction" name="loginForm" 
     scope="request" validate="false" input="/index.jsp"> 
     <forward name="success" path="/addAssignment.jsp"></forward> 
     <forward name="error" path="/index.jsp"></forward> 
    </action> 
    <action path="/addAssignmentAction" type="assignment.AddAssignmentAction" 
     name="AddAssignmentForm" scope="request" validate="false" 
     input="/addAssignment.jsp"> 
     <forward name="success" path="/mainMenu.jsp"></forward> 
     <forward name="error" path="/addAssignment.jsp"></forward> 
    </action> 
    </action-mappings> 
    <!-- ========== Message Resources Definitions =========================== --> 
</struts-config> 

答えて

1

あなたの予想は間違っています。その名前とドキュメントが示しているように、<logic:present>は、その値が要求に存在する場合には本体です。属性が空でないかどうかは関係ありません。属性は存在し、本体は実行されます。

代わり<logic:notEmpty>タグを使用するか、より良い、これらの時代遅れの論理タグを忘れて、代わりにJSTL <c:if>タグを使用する必要があります。

<c:if test="${!empty messages}"> ... </c:if> 
関連する問題