2013-03-07 4 views
1

사용자가 액세스 할 수 없어도 읽기 전용으로 정의 된 일부 필드가있는 JSF2 양식이 있습니다. 내가 직면 한 문제는 양식을 제출할 때 읽기 전용 필드가 null로 평가된다는 것입니다. 나는 약간의 제안이있는 스레드 Data in <h:inputText readonly="true"> disappears when command button is clicked을 읽었지 만, 어떻게 작동하는지 또는 내 양식에 문제가 있다는 것을 이해하지 못했습니다.JSF2 읽기 전용 값이 제출되지 않았습니다.

<h:inputTextarea id="attLFld" value="#{cc.attrs.inc.attL}" rows="8" cols="40" 
     onblur="lookupL(this.value)" > 
    <rich:validator/> 
</h:inputTextarea> 

<h:inputText id="attLIFld" value="#{cc.attrs.inc.attLI}" size="14" readonly="true" /> 

<a4j:jsFunction name="lookupL" execute="attLFld" 
     render="attLFld,attLIFld" 
     action="#{incController.lookupL}">   
</a4j:jsFunction> 

을 그리고 여기 내 컨트롤러 방법은 읽기 전용

로 설정 태그를 사용하여 InputText]를 필드가 위의 스레드에서 제안 내가 노력

public void lookupL() 
{ 
    newInc.setAttLI("1234"); 
} 

입니다 : 여기

은 내 양식이 무엇
<h:inputText id="attLIFld" value="#{cc.attrs.inc.attLI}" size="14" readonly="#{facesContext.renderResponse}" /> 

하지만 저에게는 도움이되지 않았습니다.


불행히도 그 제안은 저에게 효과적이지 않았습니다. 내 양식에 문제가 있다고 생각하지만, 나는 무엇을 볼 수 없습니다. 어떤 도움이라도 대단히 환영 할 것입니다. 여기

는 XHTML 추출물 (내가 BTW, Richfaces 4 사용)

<composite:implementation> 
<h:panelGrid columns="3" border="0"> 
<h:panelGrid columns="1" border="0"> 
    <rich:panel id="rpA"> 
     <f:facet name="header"> 
      <h:outputText value="Field Group A"/> 
     </f:facet> 
     <h:panelGrid columns="2" columnClasses="titleCell" border="0">  
      <h:outputLabel for="fldA1" value="Field A1:" /> 
      <h:inputTextarea id="fldA1" value="#{cc.attrs.mybean.fldA1}" rows="8" cols="40" immedite="true" onblur="lookup(this.value)" > 
       <rich:validator/> 
      </h:inputTextarea>    

      <h:outputLabel for="fldA2" value="Field A2:" /> 
      <h:inputText id="fldA2" value="#{cc.attrs.mybean.fldA2}" size="14" readonly="true" />      

      <h:outputLabel for="fldA3" value="Field A3:"/> 
      <h:inputText id="fldA3" value="#{cc.attrs.mybean.fldA3}" readonly="#{facesContext.renderResponse}" size="14"/>    

     </h:panelGrid>   
    </rich:panel>  
</h:panelGrid> 
<h:panelGrid id="pgButtons" columns="1" border="0"> 
    <a4j:commandButton type="button" value=">>>>" action="#{myBeanController.copyFields}" immediate="true" 
    execute="fldA1,fldA2,fldA2H,fldA3,fldA3H" 
    render="fldB1,fldB2,fldB3"/> 

</h:panelGrid> 

<rich:panel id="rpB"> 
     <f:facet name="header"> 
      <h:outputText value="Field Group B"/> 
     </f:facet> 
     <h:panelGrid columns="2" columnClasses="titleCell" border="0">  
      <h:outputLabel for="fldB1" value="Field B1:" /> 
      <h:inputTextarea id="fldB1" value="#{cc.attrs.mybean.fldB1}" rows="8" cols="40" immediateue="true" > 
       <rich:validator/> 
      </h:inputTextarea>    

      <h:outputLabel for="fldB2" value="Field B2:" /> 
      <h:inputText id="fldB2" value="#{cc.attrs.mybean.fldB2}" size="14" readonly="true" />  


      <h:outputLabel for="fldB3" value="Field B3:"/> 
      <h:inputText id="fldB3" value="#{cc.attrs.mybean.fldB3}" readonly="#{facesContext.renderResponse}" size="14"/> 


     </h:panelGrid>   
    </rich:panel>  
</h:panelGrid>  

<div id="hiddenFields"> 

    <h:inputHidden value="#{cc.attrs.mybean.fldA2H}" id="fldA2H" /> 
    <h:inputHidden value="#{cc.attrs.mybean.fldA3H}" id="fldA3H"/> 
</div> 

<a4j:jsFunction name="lookup" execute="fldA1" 
    render="fldA1,fldA2,fldA3,,fldA2H,fldA3H" 
    action="#{myBeanController.lookup}"> 
    <a4j:param name="loc" assignTo="#{cc.attrs.mybean.fldA1}" /> 
</a4j:jsFunction> 

</composite:implementation> 

는 내가 여기서 할 노력하고있어 것은 내가 클릭하면 다음 필드 A1에 뭔가를 입력 A2 및 A3 필드를 채울하는 것입니다입니다 모든 Ax 필드를 Bx 필드에 복사하는 버튼. 방법 copyFields이처럼 사용할 구성 요소를 만들 수

@Model 
public class MyBeanController { 
    private MyBean newMBean; 
    private MyBean mBean; 

    @Produces 
    @Named 
    public MyBean getNewMBean() { 
     return newMBean; 
    } 

    @Produces 
    @Named 
    public MyBean getMBean() { 
     return mBean; 
    } 

    public void setNewMBean(MyBean mBean) { 
     this.mBean = mBean; 
    } 

    @PostConstruct 
    public void initNewMBean() { 
     newMBean = new MyBean();   
    } 

    public void lookup() { 
     newMBean.setFldA2("boo"); 
     newMBean.setFldA2H("boo"); 
     newMBean.setFldA3("hoo"); 
     newMBean.setFldA3H("hoo"); 
    } 

    public String copyFields() { 
     newMBean.setFldB1(newMBean.getFldA1()); 
     newMBean.setFldB2(newMBean.getFldA2H()); 
     newMBean.setFldB3(newMBean.getFldA3H()); 
     return null; 

    } 
+0

당신은 단순히 병렬로 숨겨진 입력 필드에 넣을 수 있습니다. 사용자가 값을 수정할 수없는 경우 양식 입력으로 왜 필요합니까? 대신 일반 텍스트로 표시하지 마세요. –

+0

제안 해 주셔서 감사합니다. 시도해 보겠습니다. 읽기 전용 필드를 제출하는 이유는 무엇입니까? 많은 이유가 있지만 주요 요구 사항은 사용자 요구 사항입니다. – user2144223

+0

나는 더 많은 파기를했고 콩 범위와 관련이있다. @ViewScoped와 RequestScoped를 사용하여 트레이드되었지만 둘 다 작동하지 않는 것 같습니다. 작동하는 유일한 범위는 세션이지만 필요한 범위는 아닙니다. 어떤 아이디어? – user2144223

답변

0

시도를 나는 첫 번째 부분을 할 수 있어요,하지만 난 볼 수 모두 버튼을 클릭합니다 (그러나 읽기 전용) 때 숨겨진 필드는 컨트롤러에 널 (null)로 평가 : 나는이 문제를 여러 번에 직면

<h:inputText id="fldA3" value="#{cc.attrs.mybean.fldA3}" disabled="#{facesContext.renderResponse}" size="14"/> 
0

, JSF가 비활성화 제출하거나 이미 인터페이스를 개발하기위한 빠르고 겉으로는 쉽게 변경해야 할 경우 통증이있을 수 있습니다 만 입력 필드를 읽지 않습니다. 이 읽기 전용 필드도 유효성이 검사되지 않습니다. 숨겨진 입력 필드를 기존 필드와 병행하여 추가하는 것은 사용하기가 불편한 다른 문제가 있으므로 입력을 일반적인 기본 조건으로두고 더 높은 z- 인덱스를 가진 추가 요소로 덮어 필드를 활성화하고 처리하도록 결정했습니다. JSF는 일반적으로 사용자에게는 읽기 전용 필드로 나타납니다. 입력란 위에 "position : absolute"가 포함 된 div를두면 적용된 CSS에 따라 읽기 전용 또는 사용 중지 된 것처럼 작동합니다. 이러한 DIV를위한 CSS의

예 : 그것은 항상 읽기 전용으로 설정되어있는 경우

div.input-blocker { 
position: absolute; 
left: 0; 
top: 0; 
z-index: 10004; 
width: 100%; 
height: 80px; 
background-color: rgba(0,0,0,0.05); 

}

관련 문제