0

私はJSTLを初めて使用するので、何か助けが必要です。

「specialties」という名前の文字列があり、特定の文字列が存在するかどうかを確認しています。存在する場合は、それに対応する入力にチェックマークを付けてから、空の文字列に置き換えます。

<input type="checkbox" name="specialities" value="OB/Gyn" 
<c:if test="${fn:containsIgnoreCase(asc_details.specialities, 'OB/Gyn')}">
<c:set var="specialities" value="${fn:replace(specialities,'OB/Gyn','')}"></c:set>
<c:out value="${'checked'}"/></c:if>
/>&nbsp;OB/Gyn

<input type="checkbox" name="specialities" value="Plastic/reconstructive"
<c:if test="${fn:containsIgnoreCase(specialities, 'Plastic/reconstructive')}">
<c:set var="specialities" value="${fn:replace(specialities,'Plastic/reconstructive','')}"></c:set>
<c:out value="${'checked'}"/></c:if>
/>&nbsp;Plastic/reconstructive

これは、最初に一致する文字列「OB / Gyn」に最適であり、空の文字列に置き換えられますが、「Plastic/reconstructive」は空の文字列に置き換えられません。なぜそれが起こっているのか理解できません。助けてください。

4

1 に答える 1

1

ここに大文字と小文字の区別のバグがあります。containsIgnoreCase()テストでは大文字と小文字が区別されないため、たとえば「プラスチック」、「プラスチック」、「PlAsTiC」、「プラスチック」に合格しますが、大文字と小文字が区別され、「プラスチック」のみreplace()が置き換えられます。

失敗したということは、値がケースと完全に一致しなかったことを意味している可能性があります。おそらくそれは実際には「プラスチック/再建」かそこらですか?

基本的に、ケーシングを修正する(およびを置換containsIgnoreCase()するcontains())か、大文字と小文字を区別しない置換を実行する必要がありますが、このような関数はJSTLでは使用できません。あなたはおそらく1つを自家栽培する必要があるでしょう。

于 2012-10-05T10:46:43.983 に答える