1

2 つの数字を入力して追加するための単純なフォームを備えた liferay ポートレットがあります。

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %>

<portlet:defineObjects />

<portlet:actionURL var="calculateURL">
    <portlet:param name="mvcPath" value="/html/calculator/edit.jsp" />
</portlet:actionURL>

<aui:form action="<%= calculateURL %>" method="post">
    <aui:input label="x" name="x" type="text" value="${x}"/>
    <aui:input label="y" name="y" type="text" value="${y}"/>
    <aui:button type="submit" value="add"/>
</aui:form>

これはうまくいきます。代わりに数値を減算できるボタンを追加したいと思います。しかし、新しいボタンを追加すると、processAction メソッドにいるときに、どのボタンが押されたかを区別する方法がわかりません。これどうやってするの?

別の方法: 方法についてこの回答を見つけましたが、機能させることができませんでした。それは私を正しい方向に向けていますか?そこで与えられた答えを試し続ける必要がありますか?

4

3 に答える 3

2

どのボタンがクリックされたかに基づいて、コントローラ クラスと jsp に 2 つの異なるアクション メソッドを設定し、それに応じてアクション URL を呼び出すことができます。クリックされたボタンに基づいてフォーム アクションを変更する以下のコードを見つけます。これにより、コントローラー クラスでビジネスをロジックごとに分離することができます。それ以外の場合は、アクションのみを使用し、パラメーターをアクションに渡して、何を実行するか (加算または減算) を識別することができます。

<portlet:actionURL var="subtractNumberURL">
</portlet:actionURL>

<portlet:actionURL var="addNumberURL">
    <portlet:param name="mvcPath" value="/html/calculator/edit.jsp" />
</portlet:actionURL>

<script type="text/javascript" charset="utf-8">
function submitForm(action){
  if(action==0){
     A.one('<portlet:namespace/>form').set('action',"<%=addNumberURL%>");
  }else{
     A.one('<portlet:namespace/>form').set('action',"<%=subtractNumberURL%>");
  }
}
</script>

<aui:form action="<%= addNumberURL%>" name="form" method="post">
    <aui:input label="x" name="x" type="text" value="${x}"/>
    <aui:input label="y" name="y" type="text" value="${y}"/>
    <aui:button type="submit" value="add" onClick="submitForm(0)"/>
    <aui:button type="submit" value="subtract" onClick="submitForm(1)"/>
</aui:form>
于 2013-06-14T05:54:55.593 に答える
1

私はこの方法で実装に成功しました (liferay 6.1.2 および FF でテスト済み)。この記事はとても役に立ちました!関数名を考慮してください: 「submitForm」であってはなりません!

<aui:script use="aui-base">
Liferay.provide(window, 'mysubmitForm', function(action) {
   if(action=='add'){
     A.one('#<portlet:namespace/>form').set('action','<%=addNumberURL.toString()%>');
  }else{
     A.one('#<portlet:namespace/>form').set('action','<%=subtractNumberURL.toString()%>');
  }
});
</aui:script>
于 2014-07-04T07:45:17.080 に答える