2014-09-30 48 views
0

在这里,我有2个标签的问题,我想如果基于先前所选的项目从列表中还打电话给他们在JSP与条件的文本列表里面,这里是我的代码: 首先JS功能:Jsp + JS + DBLookup +内部情况,解决方案?

<script language="javascript"> 


    var basevalue; 
    function checkoutlet(id) 
{ 
    basevalue= document.getElementsById(id).value; 
    return basevalue; 
} 




</script> 

这里是JSP部分:

<tr> 
       <td class="txtMF">Base<span class="txtnbmed"><span class="txtredsmall">*</span></span></td> 
       <td class="txtnbmed" Id="base"> 
          <html:select property="spotterBase"> 
          <option value="">-- Select --</option> 
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.base" /> 
          </html:select> 
         </td> 
      </tr> 
      <tr> 
       <td class="txtMF">Outlet Code</td> 
       <td class="txtnbmed"> 
          <html:select property="spotterOutlet" onchange="checkoutlet('<%=base%>');"> 

          <option value="">-- Select --</option> 

          <script language="javascript"> 
          if (basevalue.equals("Branch")){ 
          </script> 

          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletb" /> 

          <script language="javascript"> 
          } else if (basevalue.equals("Dealer")){ 
          </script> 

          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletd" /> 
          <script language="javascript"> } </script> 
          </html:select> 
         </td> 
      </tr> 

对不起,代码有点乱!我需要一些帮助来解决这个问题,通过提前:)谢谢

+0

更多解释;当我选择一个“基本”项目时,outlet的列表会直接生效并调用合适的查询(lookupName),所以在我的情况下如果基数是“Branch”,它将调用lookUpName =“common.spotter.outletb” ,否则,如果“经销商”的lookUpName =“common.spotter.outletd”将被调用,否则,如果基地是其他没有查询将是卡莱因此通过结果出口代码列表将是空的(无选项),这是senario我想要!我希望有人能帮助我,这是紧急情况!谢谢 – slimoss 2014-09-30 10:14:43

+0

那么目前Outlet Code的输出是什么? – user23123412 2014-10-01 02:23:48

+0

当前输出的选择列表是两个查询结合在一起的结果!并且这个输出是相同的,并且如果我选择另一个“基础”选项则不会改变! – slimoss 2014-10-01 02:44:11

回答

0

这里是谁感兴趣的解决方案:

首先在JS部分:

function checkoutlet() 
{ 
document.forms[0].action = "populate_spotter_instant.do"; 
document.forms[0].submit(); 

} 

populate_spotter_instant是一种服务,帮助申请chages instantle它意味着你只需要在表单中写入,而struts表单将保存新的值,In Service文件是服务,其逻辑是从当前表单获取值并保存在对象中,类似于此:

private ActionForward doPopulateSpotterInstant(
     ActionMapping mapping, 
     SpotterSelectForm spotterForm, 
     SessionData sessionData) 
     throws Exception 
    { 
    log.debug("doPopulateSpotterInstant | Begin "); 

    SpotterRequestValueObject requestVo = new SpotterRequestValueObject(); 

    String branchCode2 = getBranchCode(sessionData); 
    log.debug("doPopulateSpotterInstant | branchCode:" + branchCode2); 

    requestVo.setBranchCode(branchCode2); 


    String spotterCode = spotterForm.getSpotterCode(); 
    log.debug("doPopulateSpotterInstant | spotterCode:" + spotterCode); 

    String companyCode = spotterForm.getCompanyCode(); 
    log.debug("doPopulateSpotterInstant | companyCode:" + companyCode); 

    String createdBy = getUserID(sessionData); 
    log.debug("doPopulateSpotterInstant | createdBy:" + createdBy); 

    Timestamp createTimestamp = new Timestamp(System.currentTimeMillis()); 
    log.debug("doPopulateSpotterInstant | createdTM:" + createTimestamp); 

    requestVo.setSpotterCode(spotterCode); 

    Gspotter gSpotter = new Gspotter(); 
    GspotterPK pk = new GspotterPK(); 
    pk.setSpCode(spotterCode); 
    pk.setComp_code(companyCode); 
    gSpotter.setComp_id(pk); 
    gSpotter.setName(spotterForm.getSpotterName()); 
    gSpotter.setSpId(spotterForm.getSpotterId()); 
    gSpotter.setBr_code(branchCode2); 
    gSpotter.setType(spotterForm.getSpotterType()); 
    gSpotter.setBase(spotterForm.getSpotterBase()); 
    gSpotter.setOutlet(spotterForm.getSpotterOutlet()); 
    gSpotter.setDesignation(spotterForm.getDesignation()); 
    gSpotter.setContact_no(spotterForm.getSpotterContactNo()); 
    gSpotter.setAddr1(spotterForm.getSpotterAddress1()); 
    gSpotter.setAddr2(spotterForm.getSpotterAddress2()); 
    gSpotter.setAddr3(spotterForm.getSpotterAddress3()); 
    gSpotter.setAddr4(spotterForm.getSpotterAddress4()); 
    gSpotter.setPostcode(spotterForm.getSpotterPostCode()); 
    gSpotter.setCreatedBy(createdBy); 
    gSpotter.setCreateTimestamp(createTimestamp); 

    requestVo.setSpotterObj(gSpotter); 


    log.debug("doPopulateSpotterInstant | End "); 
    return mapping.getInputForward(); 
    } 

OK,现在在JSP部分:

<tr> 
       <td class="txtMF">Base<span class="txtnbmed"><span class="txtredsmall">*</span></span></td> 
       <td class="txtnbmed" id="base"> 
          <html:select property="spotterBase" onchange="javascript:checkoutlet();"> 
          <option value="">-- Select --</option> 
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.base" /> 
          </html:select> 
         </td> 
      </tr> 
      <tr> 
       <td class="txtMF">Outlet Code</td> 
       <td class="txtnbmed"> 
       <% 

       SpotterSelectForm form = (SpotterSelectForm)request.getAttribute("SpotterSelectForm"); 

       if(form.getSpotterBase() == null){ 
       %>   <html:select property="spotterOutlet" disabled="true"> 

          <option value="">-- Select --</option>        
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletd" > 

          </dblookup:DBLookupTagVer2> 

          </html:select> 

       <% 
       }else if(form.getSpotterBase() == 'B'){ 
       %> 
       <html:select property="spotterOutlet"> 

          <option value="">-- Select --</option>        
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletb" > 

          </dblookup:DBLookupTagVer2> 

          </html:select> 
       <% 
       }else if(form.getSpotterBase() == 'D'){ 
       %> 

          <html:select property="spotterOutlet" > 

          <option value="">-- Select --</option>        
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletd" > 

          </dblookup:DBLookupTagVer2> 

          </html:select> 


       <% 
       }else { 
       %>   <html:select property="spotterOutlet" disabled="true"> 

          <option value="">-- Select --</option>        
          <dblookup:DBLookupTagVer2 lookUpName="common.spotter.outletd" > 

          </dblookup:DBLookupTagVer2> 

          </html:select> 

       <% 
       } 
       %> 

         </td> 
      </tr> 

所以就像你看到的我用Scriplets实例的形式,并使用它的属性,如已经救了我目前的形式的价值观,并呼吁在该基地的Dorp的JS方法因此当我改变Base值时,所有的表单值将被重新填充,然后我的插座将有权访问新的Base值,并且基于它会讨厌引用这些QueryTag的合适查询:

<query cacheDuration="90000" cacheMaxRows="100" key="common.spotter.outletb" toCache="true"> 
    <stmt> 
    <![CDATA[ 
    SELECT BIBRCD, BIBRCD||'-'||BIBRNM from e31dlib3.GBRANCH where BIBRTY='B' AND BIRS='A' 
    ]]> 
    </stmt> 
</query> 
<query cacheDuration="90000" cacheMaxRows="100" key="common.spotter.outletd" toCache="true"> 
    <stmt> 
    <![CDATA[ 
    SELECT BIBRCD, BIBRCD||'-'||BIBRNM from e31dlib3.GBRANCH where BIBRTY='D' AND BIRS='A' 
    ]]> 
    </stmt> 
</query> 

就是这样,一切都完成了,它对我来说非常完美,如果不行足够的细节让我知道!