2016-06-03 5 views
0

계산 된 필드를 사용하여 목록 상자 값을 표시하는 방법에 대해 알고 싶습니다.xpages : 계산 필드에 onchange 이벤트가있는 목록 상자에 여러 값이 표시됩니다.

제 생각에는 목록 상자와 계산 필드가 있습니다. 목록 상자에서, 나는 onchange를 이벤트에 부분적인 업데이트를 사용하고 부분 업데이트 ID는 필드를 계산

나는 listbbox에 대한 코드와 계산 여기에 필드 게시 할 수 있습니다

: 목록 상자를 들어

:

<xp:listBox id="listBox2"> 
    <xp:selectItems> 
     <xp:this.value><![CDATA[#{javascript:viewScope.get("vs1"); 
}]]></xp:this.value> 
    </xp:selectItems> 
    <xp:eventHandler event="onchange" submit="true" 
     refreshMode="partial" refreshId="computedField1"> 
    </xp:eventHandler></xp:listBox> 

계산 된 필드 :이 부분에서는이 게시물을 읽었습니다 : How to get display text of combobox and not the alias? 어떻게 목록 상자 값을 표시하는지 알아보십시오. 내가 처음에 코드를 실행하면

function getComponentLabel(componentId) {  
var select = getComponent(componentId); 
var value = select.getValue(); 
try { 
    var list = select.getChildren(); 
    if (value) { 
     for (var i = 0; i < list.length; i++) { 
      if ((typeof list[i]).indexOf("SelectItems") > -1) { 
       items = list[i].getValue(); 
       for (var k = 0; k < items.length; k++) { 
        if (items[k].getValue() === value) { 
        return items[k].getLabel(); 
        } 
       } 
      } 
      else if((typeof list[i]).indexOf("SelectItem") > -1) { 
      if (list[i].getItemValue() === value) { 
       return list[i].getItemLabel(); 
      } 
      } 
     } 
    } 
} catch (e) {  
} 
return value; 
} 

var dspValue = getComponentLabel("listBox1");//yes, it's listbox 1 not listbox2, if type listbox2, the computed field will show null (not sure why) 

return "The listbox selected value(s) is: " + dspValue; 

는 지금까지 내가 목록 상자의 값을 넣어 계산 된 필드는 목록 상자에서 선택한 값을 표시 할 수 있습니다. 그러나 목록 상자에 여러 값을 입력하면 계산 된 필드는 내가 입력 한 최신 값만 표시 할 수 있습니다.

나는 목록 상자에서 선택한 값을 얻기 위해 계산 된 필드에서 루프를 사용하는 것을 시도했다 :

var text=""; 
for (var i = 0; i < dspValue.length; i++) 
{ 
    text += dspValue[i]; 
} 
return "you select value is: " + text; 

가 그럼이 코드를 실행, 나는 오류 메시지가 dspValue가 null 말했다 얻을. 또한 for 루프없이 dspValue.length를 표시하고 동일한 오류가 발생합니다.

for 루프를 사용하는 대신 목록 상자에서 모든 값을 가져 와서 계산 된 필드에 표시 할 생각이 없습니다.

계산 된 필드를 사용하여 목록 상자에서 선택한 값을 모두 표시하는 방법은 무엇입니까? 어떤 조언을 주셔서 감사합니다.

+0

실명을 사용하는 것이 좋습니다. 커뮤니티와의 상호 작용이 훨씬 좋은 경험이됩니다. –

답변

0
+0

안녕하세요 @ 프랑크 판 데르 린덴, 제안 해 주셔서 감사합니다. 나는이 게시물을 읽고 계산 된 필드에서이 [website] (https://openntf.org/XSnippets.nsf/snippet.xsp?id=getcomponentvalue)에서 코드를 시험해 보았습니다. 그러나 계산 된 필드는 목록 상자에 값을 입력했는지에 관계없이 결과에 대해서만 null을 반환합니다. 아마 내가 코딩을 오해 한 것 같아요. 코드에'getSubmittedValue'를 넣으면 목록 상자에 여전히 계산 된 필드를 업데이트해야합니까? – beginner

+0

죄송합니다. 한 번 더 질문 해주세요. 나는 도미노 디자이너 8.5.2를 사용하고 있습니다. 그렇다면 도미노 디자이너의 버전에 대해 걱정할 필요가 있습니까? – beginner

+1

Xpages 개발을하고 있다면.업데이트 팩 1이 설치된 8.5.3의 MINUMIUM에 있어야합니다. 디자이너와 서버의 경우. 그리고 실제로 그것을 쓰는 것은 고통 스럽습니다. 실제로 서버 및 설계자는 최신 버전 인 9.0.1을 사용해야합니다. 8.5.2가 2010 년에 나왔습니다. 보안 업데이트가 없으면 모든 웹 기술을 업데이트해야합니다. –

0

한 가지 가능한 솔루션은 읽기 전용 '중복을 사용하고, 대신에 계산 된 필드를 단순화하는 것입니다, 당신은 문제의 폴 위더스의 대답을 참조 구성 요소의 submittedValue을 필요로 할 수 있음 '목록 상자 대신. 이렇게하면 목록 상자의 읽기 전용 렌더러가 적절한 레이블을 결정하는 데 많은 어려움을 겪습니다. 두 목록 상자의 선택 값이 동일해야합니다.

<!-- This is your List Box --> 
<xp:listBox id="listBox1" value="#{viewScope.yourValue}" multiple="true"> 
    <xp:selectItem itemLabel="Label One" itemValue="1"></xp:selectItem> 
    <xp:selectItem itemLabel="Label Two" itemValue="2"></xp:selectItem> 
    <xp:selectItem itemLabel="Label Three" itemValue="3"></xp:selectItem> 
    <xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="listBox2"></xp:eventHandler> 
</xp:listBox> 


<!-- This is instead of your 'Computed Field' --> 
<xp:listBox id="listBox2" value="#{viewScope.yourValue}" readonly="true"> 
    <xp:selectItem itemLabel="Label One" itemValue="1"></xp:selectItem> 
    <xp:selectItem itemLabel="Label Two" itemValue="2"></xp:selectItem> 
    <xp:selectItem itemLabel="Label Three" itemValue="3"></xp:selectItem> 
</xp:listBox> 

유일한 단점은 읽기 전용 값이 각 행의 각 레이블이있는 세로 테이블로 렌더링된다는 것입니다. 쉼표로 구분 된 경우가 있습니다. 쉼표로 구분 된 디스플레이 나 원하는 것을 지원하는 다른 읽기 전용 컨트롤과 동일한 개념을 사용할 수도 있습니다. 또는 사용자 정의 렌더러를 만들 수 있지만 그것은 물고기의 또 다른 주전자입니다!

+0

안녕하세요 카메론 그레고르, 당신의 제안에 감사드립니다. 목록 상자에서 '읽기 전용'을 사용하려했지만 목록 상자가 보이지 않게되었습니다. – beginner

+0

그냥 명확하게하기 위해, 나는 당신의 계산 된 필드 대신 사용되는 두 번째 목록 상자와 함께 2 개의 목록 상자를 갖기 위해 위의 예제에서와 같이 원래의 목록 상자를 '읽기 전용'으로 만들려고하지 않았습니다. 두 번째 목록 상자는 읽기 전용으로 표시됩니다. 선택한 값이없는 경우 읽기 전용 목록 상자가 표시되지 않습니다. 또한 귀하의 질문을보고, 귀하의 목록 상자가 조금 이상한 어떤 값에 바인딩되지 않습니다, 당신은 일반적으로 일종의 문서 필드 또는 범위 변수 또는 관리 빈 속성을 바인딩 목록 상자를 –

+0

목록 상자가 지금 작동합니다. 불편을 끼쳐 드려 죄송합니다. 고맙습니다. – beginner

관련 문제