處理證人list界面時的問題

       證人和證據的關係:一個證人對應多個證據。

       該關係使用了動態枚舉的方式,在建立一個案件的證據時,可以在證人信息的編輯界面,使用複選框組的形式,顯示所有的證據信息。在編輯證人信息時,需要選擇與其相關

的證據。

       在數據庫中,證人表爲t_jud_witness,其中proofs字段是與證據相關的。在選取多個證據之後,將會把證據的id存放進去,多個id之間使用“,”作爲間隔。

以此爲前提:

       在證人表的list界面中,需要顯示與該證人相關的證據信息。效果:“證據1,證據2,證據3”。

       在使用<Combox:combox>時出現一個問題,雖然成功顯示了證據的名字,但是在每個名字後多了一個空格。查詢數據庫發現,數據庫中存放的數據正確,並沒有空格存在。

查詢原因發現,該現象是因爲使用combox標籤時,doTag方法裏面使用的是println的方式進行輸出的。 也就是說,默認換行輸出。 在list界面中出現的這個空格,打開網頁源代碼

可以看到是換行所致。

      下面的代碼可解決問題:

      <c:set var="n">\n<c:set>

      <c:if test="${tjudWitness.proofs != null}">

           <c:set var="objectIds" value="${fn:split(tjudWitness.proofs, ',')}" />

           <c:forEach items="${objectIds}" var="objectId" varStack="k">

                <c:set var="proofName">

                   <Combox:Combox rname="proof_names" isLabl="99" hql="select t.id, t.proofName from TjudProof t where t.id='${objectId}'" rvalue="${objectId}" />

                </c:set>${fn:replace(proofName, n, "")}${k.index < fn:length(objectIds)-1 ? ',' : ''}

          <c:forEach>

      </c:if>

       這竄代碼的意思是:

      1.在證據字段不爲空時,把證據的多個id拆分,並且存放近objectIds裏面。

      2.對所有證據的id進行遍歷,其中每一項命名爲objectId,varStack設置爲k

      3.使用combox標籤內的hql語句將所有的證據的名字列出,基本功能到此完成。

      4.使用fn:replace將所有的換行字符替換爲空字符串,使用<c:set>將"\n"設置爲"n",否則使用replace時會報錯,不能正確識別。 並且使用<c:set>標籤,將查詢出來的

(證據 1 ,證據2, 證據3 )設置爲proofName方便替換。

      5.k的作用是拼接逗號,保證除最後一個證據外,每個證據後邊都會有一個逗號。


      整個過程就是這樣,雖然不是自己寫出來的。但是經過仔細的分析,已經搞懂了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章