2012-11-12 15 views
6

Bir jsp dosyasında formum var. İki gönderme düğmesi vardır: "Arama" ve "Yeni Ekle" düğmesi. Struts Eylem sınıfta struts.xmlGönderme düğmesi nasıl algılanır, tek bir Action sınıfında birden çok gönderme düğmesinin senaryosunda tıklanır?

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
    "http://struts.apache.org/dtds/struts-2.3.dtd"> 

<struts> 

    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="true" /> 

    <package name="default" namespace="/" extends="struts-default"> 

     <default-action-ref name="index" /> 

     <global-results> 
      <result name="error">/error.jsp</result> 
     </global-results> 

     <global-exception-mappings> 
      <exception-mapping exception="java.lang.Exception" result="error"/> 
     </global-exception-mappings> 

    </package> 

    <package name="example" namespace="/example" extends="default"> 

     <action name="employeeAction" class="example.EmployeeAction"> 
      <result name="search">/example/search.jsp</result> 
      <result name="add" type="redirect">/example/add.jsp</result> 
     </action> 

    </package> 
</struts> 

yılında

<s:form name="searchForm" action="employeeAction" method="post"> 
    <s:textfield name="id" label="Employee ID"/> 
    <s:textfield name="name" label="Employee Name"/> 

    <s:submit value="Search"/> 
    <s:submit value="Add New"/> 
</s:form> 

, biz http isteği işlenirken, yani execute() yöntemdir tek yöntem olduğunu biliyoruz. Ben Arama butonuna tıklandığında benim beklenen durumunda,

, verileri arama gerçekleştirmek ve ben , bu /example/add.jsp sayfayı yönlendirme gerçekleştirecek Yeni düğme ekleyin tıklandığında /example/search.jsp, veri verecek. Ancak, tıklandığında her iki düğme de execute() yöntemine girecektir. Bu yüzden, execute() yönteminde hangi düğmeyi tıkladığımı bilmem gerekiyor.

senaryo Sen struts.xml dosyasında iki eylemleri tanımlamak ve farklı eylemler http://struts.apache.org/docs/submit.html boyun amacıyla <s:submit> etiketinin action özelliğini kullanabilirsiniz bu

public class EmployeeAction extends ActionSupport { 

    public String execute() throws Exception { 

     //PSEUDOCODE 
     //IF (submitButton is searchButton) 
     // return doSearch(); 
     //ELSE IF (submitButton is addNewButton) 
     // return doAddNew(); 

     return SUCCESS; 
    } 

    public String doSearch() throws Exception { 
     //perform search logic here 
     return "search"; 
    } 

    public String doAddNew() throws Exception { 
     return "add"; 
    } 
} 

cevap

17

benziyor. JSP ise

:

<s:submit value="Search" action="searchEmployeeAction"/> 
<s:submit value="Add New" action="addEmployeeAction"/> 

struts.xml olarak:

<action name="addEmployeeAction" method="add" class="example.EmployeeAction"> 
    <result>/example/add.jsp</result> 
</action> 

<action name="searchEmployeeAction" method="search" class="example.EmployeeAction"> 
    <result>/example/search.jsp</result> 
</action> 

Ve eylem

iki public String yöntemleri add ve search oluşturun.

Birden Fazla Gönderme Düğmesi http://struts.apache.org/docs/multiple-submit-buttons.html hakkında bilgi edinin. Struts2 sürümü 2.3.15.3 başlayarak

Update action: öneki için destek sağlamak amacıyla true struts.mapper.action.prefix.enabled sabit ayarlamanız gerekir.

sizin struts.xml dosyada koy:

<constant name="struts.mapper.action.prefix.enabled" value="true" /> 
+2

Bkz. Http://struts.apache.org/2.x/docs/multiple-submit-buttons.html. –

+0

evet .... anladım ... –

+0

@AleksandrM: Daha ayrıntılı cevaplar verebilir misiniz? Struts.xml eşlemesinin nasıl göründüğü gibi. Birden fazla gönderim düğmesinin makalesi hakkında, aslında bunu okudum :). Birincisi (boolean sahne kullanarak) ümit vericidir, fakat bir şekilde işe yaramadı, düğmenin dize etiketinin boole denetleyicisi tarafından boolean'a dönüştürülemeyeceği, büyük olasılıkla eski sürümlerde çalışmak için kullanıldığı anlaşılıyor (struts 2.3 kullanıyorum) . İkincisi, buton etiketi ile sıkı bağlantı nedeniyle iyi değil. – null

6

modeliniz katmanında, 'butonu' adlı bir String özelliğini tanımlar. Şimdi, hem gönder düğmeleriniz için, 'düğme' olarak name veya property özniteliğini belirtin. Yani, execute() yönteminizde, 'düğme' özelliğinde, karşılık gelen değeri alırsınız.

İlgili konular