2015-01-02 3 views
0

내가 내 양식에서 일부 인수를 전달할 수있는 XBL 파일이, 이제 가정 해 봅시다 :색슨 다루기 : 평가 예외

<xf:model> 
    <xf:action id="populate-data-binding">       
     <xf:action context="instance('sub')" 
        ev:event="xforms-submit-done" 
        ev:observer="my-submission">      
      <xf:action>   
       <xf:var as="xs:string" name="control-value" value="saxon:evaluate(instance('arg1'))"/> 
       <xf:var as="xs:string" name="control-name" value="saxon:evaluate(instance('arg2'))"/> 
       <xf:setvalue ref="xxf:instance('fr-form-instance')//*[name() = $control-name]" 
          value="$control-value"/> 
      </xf:action> 
    </xf:action> 
</xf:model> 

문제 :

<my-xbl arg1='' arg2=''> 
</my-xbl> 

<xf:input ref='@arg1'/> 
<xf:input ref='@arg2'/> 

은 그 때 나는 이런 식으로 뭔가를 arg1이 빈 문자열 인 경우 (즉, 내 양식에서 제어 설정을 누를 때 arg1 필드를 건너 뛰고 빈 상태로두면) 내 양식이 충돌합니다. '' 또는 빈 문자열 (asd, q, anything)을 삽입 할 때 arg1은 모두 정상입니다. 그래서 지금은 따옴표 문제 (조건이 '' 사이에 있어야 내가 내부에 따옴표를 넣을 수 없습니다) 분명히 있기 때문에, 그것은 작동하지 않습니다

<xf:var as="xs:string" name=".." value="if(@arg1 ='null') then 'asd' 
else 'saxon:evaluate(instance('arg1'))'/> 

처럼 뭔가를하고 다른 아마 뭔가 싶습니다. 누군가가이 문제를 해결하도록 도울 수 있습니까? 미리 감사드립니다.

UPDATE :

내가 조금 unprecise이었다고 생각한다. 일을 명확하게하기 위해 arg1은 내 양식에 xf:input의 ID입니다. 양식이로드되면 REST 서비스를 호출하고 (이 작업을 한 번 수행하면 Event xforms-model-construct-done behaviour) 데이터가 전송됩니다. 이제 xf : inputs에 데이터를 채우고 싶습니다. 위의 코드는 매우 잘 수행합니다. 내 양식에 내가 컨트롤의 기본 설정에 갈 때 문제가 지금보다 같은

<my-xbl arg1 = '' arg2 = '' ... arg19 = '' arg20 = ''/> 

보이는, 내 XBL에 내가 매개 변수의 많은뿐만 아니라 arg1, arg2을 가지고있다, 나는 모든 paraemters arg1...20를 다 채우실 필요 . 나는 내가 필요한 사람들 만 채우고 싶다. 보통 3 ~ 4 개이고 나머지는 비워 둡니다. 문제는 내가 할 수 없다는 것입니다. 왜냐하면 saxon : evalute가 인수가 null 인 경우 예외를 throw하기 때문에 내 양식이 충돌하고 그것이 발생하기 때문입니다.

(또한 모든 것을 언급,하지만 난 그것을 여기에 관련된 생각하지 않습니다하지만 당신이 내 위의 코드를 이해하는 데 도움이 될 수 있습니다 : 실시간으로, arg2xf:input하지만 arg1의 ID는 웹 서비스에 자원하는 경로 같은입니다 , fe arg2 = "'firstname'" 내 xf : 입력 및 arg1 =" //CUSTOMER/FIRSTNAME" (따옴표 없음)을 참조하고 내 REST 서비스 URL은 http://www.thomas-bayer.com/sqlrest/CUSTOMER/2/입니다.이 방법은 xf : 인 id 'firstname'을 입력 할 수 있습니다. 전체 이름 웹 서비스에서 가져온 데이터입니다. 그런 다음 다시 arg4는 'lastname'이고 arg3은 //CUSTOMER/LASTNAME이 될 것입니다. 내가 말했듯이 여기서는 관련이 없다고 생각하십시오.)

그래서 비어있는 값을 확인하고 코드가 나를 도와 줘야한다고 생각합니다. 불행히도 작동하지 않습니다. 내 양식이 더 이상 충돌하지 않지만 데이터가 xf:inputs으로 채워지지 않습니다. 어쩌면이 오해 때문일까요? 감사.

+0

이와 같이 추상적으로 파악하기가 약간 어렵습니다. 살펴볼 수있는 최소한의 예를 제공 할 수 있습니까? – ebruchez

+0

나는 실제로 그것을 스스로 해결할 수 있었지만, 나는 이것을 해결하기 위해 약간의 추가 orbeon 지식이 필요하다고 생각했다. 그러나 당신의 대답 (그리고 몇몇 이전의 것들)은 나를 도왔다. 감사합니다 – pzeszko

+0

다행 당신이 그것을 알아 냈어! – ebruchez

답변

1
<xf:var 
    as="xs:string" 
    name="..." 
    value=" 
     if(@arg1 ='null') 
     then 'asd' 
     else 'saxon:evaluate(instance(''arg1''))"/> 

빈 문자열을 테스트하려면 normalize-space()을 사용하는 것이 좋습니다. 또한, 나는 값이 두 경우 모두에 저장되는 위치 instance('arg1')는 추측 :

<xf:var 
    as="xs:string" 
    name="..." 
    value=" 
     if (normalize-space(instance('arg1')) = '') 
     then 'asd' 
     else 'saxon:evaluate(instance(''arg1''))' 
"/> 

하지만 난 당신이 saxon:evaluate() 전화를 인용해야하는 이유에 조금 불분명입니다.변수를 보유 하시겠습니까?

  1. 평가 결과가 좋습니까?
  2. 또는 XPath 표현식?
+0

처음부터 부정확하게 해드립니다. - 제 질문을 업데이트했습니다. 코드가 정상적으로 보이지만 불행히도이 오해 때문에 작동하지 않습니다. – pzeszko