2011-03-09 3 views
1

나는 심 웹 응용 프로그램이 하나 개의 페이지에 대해 내가 가진 하드 코딩 매개 변수와 같은 :심 이상한 PARAM 오류

docCodesFrom=ClinicContactsView 
내가 선언 DocCodesEdit.page.xml에서

그것은 간단 같은 :

<param name="docCodesFrom"/> 

문제는 DocCodesEdit.xhtml 페이지를로드 한 후 취소 버튼 (이전 페이지로 리디렉션 됨)을 누르면 매우 이상한 오류가 발생합니다.

그것은이 docCodesFrom 매개 변수에 대해 불평 그래서

Caused by java.lang.ClassCastException with message: "java.lang.String cannot be cast to javax.faces.validator.Validator"

....

내가 취소 누르면 페이지에 전파를 수행하는 링크입니다 :

<s:link view="/#{empty from ? 'DocCodes' : from}View.xhtml" 
     value="#{empty from ? 'View' : 'Select'}" 
     propagation="#{empty from ? 'none' : 'default'}" 
     id="docCodesViewId"> 
     <f:param name="docCodesId" 
      value="#{_docCodes.id}"/> 
     <f:param name="docCodesFrom" value="ClinicContactsView"/> 
</s:link> 

내가 이것에 세 시간 보냈다 원인을 파악할 수 없습니다 ...

문제가 있습니까?

없음 심 개발자 overhere :(

UPDATE :

ClinicContactsView.xhtml (사용자가 DocCodesEdit.xhtml가는 곳에서 페이지의 소스 코드, 여기에 내가 추가 docCodesFrom . 매개 변수

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:s="http://jboss.com/products/seam/taglib" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:rich="http://richfaces.org/rich" 
       xmlns:a4j="http://richfaces.org/a4j" 
       template="layout/template.xhtml"> 

<ui:define name="body"> 
    <h:form id="contactDetailsSearch"> 
     <rich:panel style="width:650px"> 
      <f:facet name="header">View Clinic Details</f:facet> 


      <!--Clinic Contact's View--> 

      <div style="widht:350px; float:left;"> 
       <div> 
        <s:decorate id="clinicName" template="/layout/display.xhtml"> 
         <ui:define name="label">Clinic Name</ui:define> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.name}"> 

         </h:outputText> 
        </s:decorate> 
       </div> 
       <div> 
        <s:decorate id="address1" template="/layout/display.xhtml"> 
         <ui:define name="label">Address</ui:define> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.address1}"/> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.address2}"/> 
        </s:decorate> 
       </div> 
       <div> 
        <s:decorate id="state" template="/layout/display.xhtml"> 
         <ui:define name="label">State</ui:define> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.state}"/> 
        </s:decorate> 
       </div> 
       <div> 
        <s:decorate id="city" template="/layout/display.xhtml"> 
         <ui:define name="label">City</ui:define> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.city}"/> 
        </s:decorate> 
       </div> 
       <div> 
        <s:decorate id="postalcode" template="/layout/display.xhtml"> 
         <ui:define name="label">Postal Code</ui:define> 
         <h:outputText value="#{clinicContactsHomeFacade.instance.postalCode}"/> 
        </s:decorate> 
       </div> 
       <div> 
        <s:decorate id="country" template="/layout/display.xhtml"> 
         <ui:define name="label">Country</ui:define> 
         <h:outputText id="countryEdit" value="#{clinicContactsHomeFacade.instance.country}"/> 
        </s:decorate> 
       </div> 
      </div> 

      <div style="clear:both"/> 


      <div class="actionButtonsMiddle"> 

       <s:button view="/ClinicContactsEdit.xhtml" 
          id="edit" 
          value="Edit"/> 

       <s:button view="/#{empty clinicContactsFrom ? 'ClinicContactsList' : clinicContactsFrom}.xhtml" 
          id="done" 
          value="Done"/> 
      </div> 

      <!--TABS--> 
      <rich:spacer height="20"/> 
      <rich:tabPanel width="100%"> 
       <!--Show contact details related to the current clinic--> 
       <rich:tab label="Contact Details"> 

        <div class="results" id="contactDetailsList"> 

         <h:outputText value="The contactDetails search returned no results." 
             rendered="#{contactDetailsDataModel.rowCount == 0}"/> 
         <rich:dataTable id="contactDetailsTable" 
             var="_contactDetails" 
             value="#{contactDetailsDataModel}" 
             rows="10" 
             rendered="#{contactDetailsDataModel.rowCount > 0}"> 

          <rich:column sortBy="#{_contactDetails.contactType}"> 
           <f:facet name="header">Contact type 
           </f:facet> 
           <h:outputText value="#{_contactDetails.contactType}"/> 
          </rich:column> 
          <rich:column sortBy="#{_contactDetails.active}"> 
           <f:facet name="header">Active 
           </f:facet> 
           <h:outputText value="#{_contactDetails.active}"/> 
          </rich:column> 
          <rich:column sortBy="#{_contactDetails.contactInfo}"> 
           <f:facet name="header">Contact info 
           </f:facet> 
           <h:outputText value="#{_contactDetails.contactInfo}"/> 
          </rich:column> 
          <rich:column sortBy="#{_contactDetails.remarks}"> 
           <f:facet name="header">Remarks 
           </f:facet> 
           <h:outputText value="#{_contactDetails.remarks}"/> 
          </rich:column> 

          <rich:column styleClass="action"> 
           <f:facet name="header">Action</f:facet> 
           <s:link view="/#{empty from ? 'ContactDetails' : from}View.xhtml" 
             value="#{empty from ? 'View' : 'Select'}" 
             propagation="#{empty from ? 'none' : 'default'}" 
             id="contactDetailsViewId"> 
            <f:param name="contactDetailsId" 
              value="#{_contactDetails.id}"/> 
            <f:param name="contactDetailsFrom" value="ClinicContactsView"/> 
           </s:link> 
           #{' '} 
           <s:link view="/ContactDetailsEdit.xhtml" 
             value="Edit" 
             propagation="none" 
             id="contactDetailsEdit" 
             rendered="#{empty from}"> 
            <f:param name="contactDetailsId" 
              value="#{_contactDetails.id}"/> 
            <f:param name="contactDetailsFrom" value="ClinicContactsView"/> 
           </s:link> 
          </rich:column> 
         </rich:dataTable> 
        </div> 
        <s:div styleClass="actionButtons" rendered="#{empty from}"> 
         <s:button view="/ContactDetailsEdit.xhtml" 
            id="create" 
            propagation="none" 
            value="Add Contact Details"> 
          <f:param name="clinicContactsId" value="#{clinicContactsHomeFacade.instance.id}"/> 
          <f:param name="contactDetailsFrom" value="ClinicContactsView"/> 
         </s:button> 
        </s:div> 

       </rich:tab> 
       <rich:tab label="Doc Codes"> 
        <rich:dataTable id="docCodesTable" 
            var="_docCodes" 
            value="#{docCodesDataModel}" 
            rows="10" 
            rendered="#{docCodesDataModel.rowCount > 0}"> 
         <rich:column sortBy="#{_docCodes.active}"> 
          <f:facet name="header">Doc Code 
          </f:facet> 
          <h:outputText value="#{_docCodes.docCode}"/> 
         </rich:column> 
         <rich:column sortBy="#{_docCodes.active}"> 
          <f:facet name="header">Doctor 
          </f:facet> 
          <h:outputText value="#{_docCodes.doctorContacts.name}"/> 
         </rich:column> 
         <rich:column styleClass="action"> 
          <f:facet name="header">Action</f:facet> 
          <s:link view="/#{empty from ? 'DocCodes' : from}View.xhtml" 
            value="#{empty from ? 'View' : 'Select'}" 
            propagation="#{empty from ? 'none' : 'default'}" 
            id="docCodesViewId"> 
           <f:param name="docCodesId" 
             value="#{_docCodes.id}"/> 
           <f:param name="docCodesFrom" value="ClinicContactsView"/> 
           <f:param name="doctorContactsId" value="#{_docCodes.doctorContacts.id}"/> 
          </s:link> 
          #{' '} 
          <s:link view="/DocCodesEdit.xhtml" 
            value="Edit" 
            propagation="none" 
            id="docCodesEdit" 
            rendered="#{empty from}"> 
           <f:param name="docCodesId" 
             value="#{_docCodes.id}"/> 
           <f:param name="docCodesFrom" value="ClinicContactsView"/> 
           <f:param name="doctorContactsId" value="#{_docCodes.doctorContacts.id}"/> 
          </s:link> 
         </rich:column> 
        </rich:dataTable> 


        <rich:datascroller for="docCodesTable" rendered="#{docCodesDataModel.rowCount > 0}"/> 

        <s:div styleClass="actionButtons" rendered="#{empty from}"> 
         <s:button view="/DocCodesEdit.xhtml" 
            id="createDocCode" 
            propagation="none" 
            value="Create DocCode"> 
          <f:param name="clinicContactsId" value="#{clinicContactsHomeFacade.instance.id}"/> 
          <f:param name="docCodesFrom" value="ClinicContactsView"/> 
         </s:button> 
        </s:div> 

       </rich:tab> 
      </rich:tabPanel> 

     </rich:panel> 
    </h:form> 
</ui:define> 

</ui:composition> 

ClinicContactsView.page.xhtml의 코드 :

<?xml version="1.0" encoding="UTF-8"?> 
<page xmlns="http://jboss.com/products/seam/pages" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd"> 

    <param name="docCodesFrom" validator="ClinicContactView"/> 
    <param name="clinicContactsFrom"/> 
    <param name="clinicContactsId" value="#{clinicContactsHome.clinicContactsId}"/> 
    <param name="clinicContactsId" value="#{clinicContactsHomeFacade.clinicContactsId}"/> 
    <param name="clinicContactsId" value="#{contactDetailsDataModel.contactId}"/> 
</page> 

DocCodesEdit.xhtml

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
       xmlns:s="http://jboss.com/products/seam/taglib" 
       xmlns:ui="http://java.sun.com/jsf/facelets" 
       xmlns:f="http://java.sun.com/jsf/core" 
       xmlns:h="http://java.sun.com/jsf/html" 
       xmlns:a="http://richfaces.org/a4j" 
       xmlns:rich="http://richfaces.org/rich" xmlns:a4j="http://richfaces.org/a4j" 
       template="layout/template.xhtml"> 

<ui:define name="body"> 

<h:form id="docCodes" styleClass="edit"> 

    <rich:panel style="width:550px;"> 
     <f:facet name="header">#{docCodesHomeFacade.managed ? 'Edit' : 'Add'} Doc code</f:facet> 

     <div style="float:left;width:350;"> 
      <s:decorate id="doctorField" template="layout/edit.xhtml"> 
       <ui:define name="label">Doctor</ui:define> 
       <h:inputText id="docCode" 
          required="true" 
          size="30" 
          maxlength="45" 
          value="#{doctorContactsHomeFacade.getInstance().name}"> 
        <a:support event="onblur" reRender="docCodeField" bypassUpdates="true" ajaxSingle="true"/> 
       </h:inputText> 
      </s:decorate> 
      <s:decorate id="docCodeField" template="layout/edit.xhtml"> 
       <ui:define name="label">Doc code</ui:define> 
       <h:inputText id="docCode" 
          required="true" 
          size="30" 
          maxlength="45" 
          value="#{docCodesHomeFacade.instance.docCode}"> 
        <a:support event="onblur" reRender="docCodeField, doctorContactsTable" bypassUpdates="true" 
           ajaxSingle="true"/> 
       </h:inputText> 
      </s:decorate> 
     </div> 
     <!--LOOKUP for doctor name: Button and Modal Panel--> 
     <div style="float:right;width:80px;margin-right:0px;"> 
      <a4j:commandButton style="display:block;width:80px;margin-top:8px;" reRender="doctorContactsTable" 
           onclick="Richfaces.showModalPanel('pnl');" 
           value="Lookup"> 
      </a4j:commandButton> 

     </div> 

     <div style="clear:both"> 
      <span class="required">*</span> 
      required fields 
     </div> 

    </rich:panel> 

    <rich:spacer height="20"/> 
    <rich:panel style="width:90%" 
       rendered="#{not empty doctorContactsHomeFacade.doctorContactsId || not empty clinicContactsHomeFacade.clinicContactsId}"> 
     <f:facet 
       name="header">Contact Details</f:facet> 
     <!--Doctors' Contact Details--> 
     <div class="results" id="contactDetailsListDoctors"> 

      <h:outputText value="The contactDetails search returned no results." 
          rendered="#{contactDetailsDataModel.rowCount == 0}"/> 
      <rich:dataTable id="contactDetailsTableDoctors" 
          var="_contactDetails" 
          value="#{contactDetailsDataModel}" 
          rows="10" 
          rendered="#{contactDetailsDataModel.rowCount > 0}"> 
       <rich:column sortBy="#{_contactDetails.active}"> 
        <f:facet name="header">Clinic/Doctor Name 
        </f:facet> 
        <h:outputText value="#{_contactDetails.contacts.name}"/> 
       </rich:column> 
       <rich:column sortBy="#{_contactDetails.contactInfo}"> 
        <f:facet name="header">Contact Details 
        </f:facet> 
        <h:outputText value="#{_contactDetails.contactInfo}"/> 
       </rich:column> 
       <rich:column sortBy="#{_contactDetails.contactType}"> 
        <f:facet name="header">Contact type 
        </f:facet> 
        <h:outputText value="#{_contactDetails.contactType}"/> 
       </rich:column> 

       <rich:column styleClass="action"> 
        <f:facet name="header">Send?</f:facet> 
        <a:region> 
         <h:selectBooleanCheckbox> 
          <!--<a4j:support event="onselect" ajaxSingle="true" action="#{docCodesHomeFacade.addSelectedContactId()}"/>--> 
          <a4j:support event="onclick" 
             action="#{docCodesHomeFacade.addSelectedContactId(_contactDetails.id)}" 
             ignoreDupResponses="true"> 
          </a4j:support> 
         </h:selectBooleanCheckbox> 
        </a:region> 
       </rich:column> 
      </rich:dataTable> 
     </div> 
    </rich:panel> 

    <div class="actionButtons"> 

     <h:commandButton id="save" 
         value="Save" 
         action="#{docCodesHomeFacade.persist}" 
         disabled="#{!docCodesHomeFacade.wired}" 
         rendered="#{!docCodesHomeFacade.managed}"/> 

     <h:commandButton id="update" 
         value="Save" 
         action="#{docCodesHomeFacade.update}" 
         rendered="#{docCodesHomeFacade.managed}"/> 

     <h:commandButton id="delete" 
         value="Delete" 
         action="#{docCodesHomeFacade.remove}" 
         immediate="true" 
         rendered="#{docCodesHomeFacade.managed}"/> 

     <s:button id="cancelEdit" 
        value="Cancel" 
        propagation="end" 
        view="/ClinicContactsView.xhtml" includePageParams="true" 
        rendered="#{docCodesHomeFacade.managed}"/> 

     <s:button id="cancelAdd" 
        value="Cancel" 
        propagation="end" 
        view="/#{empty docCodesFrom ? 'DocCodesList' : docCodesFrom}.xhtml" 
        rendered="#{!docCodesHomeFacade.managed}"/> 

    </div> 
</h:form> 

<!--RICH MODAL PANEL to LOOKUP for Doctors--> 
<!-- <a4j:form>--> 
<a:form> 
    <rich:modalPanel id="pnl" width="800" height="500"> 

     <f:facet name="header"> 
      <h:outputText value="Select Doctor"/> 
     </f:facet> 

     <f:facet name="controls"> 
      <h:panelGroup> 
       <h:graphicImage value="/img/icons/close.gif" style="cursor:pointer" id="hidelink"/> 
       <rich:componentControl for="pnl" attachTo="hidelink" operation="hide" 
             event="onclick"/> 
      </h:panelGroup> 
     </f:facet> 

     <!-- some unsignificant code removed --!> 
     <div class="actionButtons"> 
      <a:commandButton id="search" value="Search" reRender="doctorContactsTable"/> 
      <s:button id="reset" value="Reset" includePageParams="false"/> 
     </div> 

     <rich:panel> 
      <f:facet 
        name="header">Doctors Search Results</f:facet> 

      <div class="results" id="doctorsContactsList"> 
       <h:outputText 
         value="The doctors contact search returned no results." 
         rendered="#{doctorContactsDataModel.rowCount == 0}"/> 
       <rich:dataTable 
         id="doctorContactsTable" var="_doctorContact" value="#{doctorContactsDataModel}" 
         rows="10" rendered="#{doctorContactsDataModel.rowCount > 0}"> 

        <rich:column sortBy="#{_doctorContact.name}"> 
         <f:facet name="header">Doctor </f:facet> 
         <h:outputText value="#{_doctorContact.name}"/> 
        </rich:column> 

        <rich:column sortBy="#{_doctorContact.state}"> 
         <f:facet name="header">SMC </f:facet> 
         <h:outputText value="#{_doctorContact.nationalCode}"/> 
        </rich:column> 

        <rich:column sortBy="#{_doctorContact.state}"> 
         <f:facet name="header">Address 1 </f:facet> 
         <h:outputText value="#{_doctorContact.address1}"/> 
        </rich:column> 

        <rich:column sortBy="#{_doctorContact.state}"> 
         <f:facet name="header">Address 2</f:facet> 
         <h:outputText value="#{_doctorContact.address2}"/> 
        </rich:column> 

        <rich:column sortBy="#{_doctorContact.state}"> 
         <f:facet name="header">Postal Code </f:facet> 
         <h:outputText value="#{_doctorContact.postalCode}"/> 
        </rich:column> 

        <rich:column styleClass="action"> 
         <f:facet name="header">#{messages['action']}</f:facet> 
         <s:button view="/DocCodesEdit.xhtml" 
            id="loadDoctor" 
            propagation="none" 
            value="Select" includePageParams="true"> 
          <f:param name="doctorContactsId" value="#{_doctorContact.id}"/> 
         </s:button> 
        </rich:column> 
       </rich:dataTable></div> 
     </rich:panel> 

     <rich:datascroller for="doctorContactsTable" rendered="#{doctorContactsDataModel.rowCount > 0}"/> 

    </rich:modalPanel> 
</a:form> 

</ui:define> 

</ui:composition> 

DocCodesEdit.page.xml는

<?xml version="1.0" encoding="UTF-8"?> 
<page xmlns="http://jboss.com/products/seam/pages" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.1.xsd" 
     no-conversation-view-id="/DocCodesList.xhtml" 
     login-required="true"> 

    <begin-conversation join="true" flush-mode="MANUAL"/> 

    <action execute="#{docCodesHomeFacade.wire}"/> 
    <param name="docCodesFrom"/> 
    <param name="docCodesId" value="#{docCodesHome.docCodesId}"/> 
    <param name="docCodesId" value="#{docCodesHomeFacade.docCodesId}"/> 
    <param name="clinicContactsFrom"/> 
    <param name="clinicContactsId" value="#{clinicContactsHome.clinicContactsId}"/> 
    <param name="clinicContactsId" value="#{clinicContactsHomeFacade.clinicContactsId}"/> 

    <param name="doctorContactsFrom"/> 
    <param name="doctorContactsId" value="#{doctorContactsHome.doctorContactsId}"/> 
    <param name="doctorContactsId" value="#{doctorContactsHomeFacade.doctorContactsId}"/> 
    <action execute="#{contactDetailsDataModel.setDoctorContactId(doctorContactsId)}" if="#{not empty doctorContactsId}"></action> 
    <action execute="#{contactDetailsDataModel.setClinicContactId(clinicContactsId)}" if="#{not empty clinicContactsId}"></action> 

    <navigation from-action="#{docCodesHomeFacade.persist}"> 
     <rule if-outcome="persisted"> 
      <end-conversation/> 
      <redirect view-id="/#{empty docCodesFrom ? 'DocCodesList' : docCodesFrom}.xhtml" 
         include-page-params="true"> 
       <param name="clinicContactsId" value="#{docCodesHomeFacade.getInstance().getClinicContacts().getId()}"/> 
      </redirect> 
     </rule> 
    </navigation> 

    <navigation from-action="#{docCodesHomeFacade.update}"> 
     <rule if-outcome="updated"> 
      <end-conversation/> 
      <redirect view-id="/#{empty docCodesFrom ? 'DocCodesList' : docCodesFrom}.xhtml" 
         include-page-params="true"> 
       <param name="clinicContactsId" value="#{docCodesHomeFacade.getInstance().getClinicContacts().getId()}"/> 
      </redirect> 
     </rule> 
    </navigation> 

    <navigation from-action="#{docCodesHomeFacade.remove}"> 
     <rule if-outcome="removed"> 
      <end-conversation/> 
      <redirect view-id="/#{empty docCodesFrom ? 'DocCodesList' : docCodesFrom}.xhtml" 
         include-page-params="true"> 
       <param name="clinicContactsId" value="#{docCodesHomeFacade.getInstance().getClinicContacts().getId()}"/> 
      </redirect> 
     </rule> 
    </navigation> 

</page> 

이 코드는 충분히 있으면 알려 주시기 바랍니다. DocCodesEdit.xhtml에서 Done을 ​​누르거나 취소 할 때 문제가 발생하여 뒷받침 빈의 Java 코드가 호출되지 않습니다 ...

+0

음, 흥미로운 질문 인 것 같지만 문제를 재현 할 수없는 것 같습니다. 매개 변수 정의와 링크가 무죄로 보인다. 관련된 세 가지 소스 파일 (호출자, 수신자, 리턴 페이지)의 버전을 모두 삭제하는 등 더 많은 컨텍스트를 제공해야합니다. –

+0

@Mpi 도움을 주셔서 감사합니다. 내 게시물을 몇 가지 코드로 업데이트했습니다.만약 당신이 뭔가를 찾으면 알려주세요 ... 나를 위해 매우 도움이 될 것입니다 ... –

답변

0

문제는 실제로 새 코드에 있습니다. 이것은 ClinicContactsView.page.xml에 숨겨져 있습니다. 위의 내용은 .xhtml으로 작성되었지만 페이지 설명자를 사용한다고 가정했습니다. 그것에서는, 라인

<param name="docCodesFrom" validator="ClinicContactView"/> 

Cancel를 눌러하여 해당 페이지로 돌아에, 당신은 작동하지 않습니다 발리에 문자열 (ClinicContactView)를 변환 할 경우, 이것은에게 있습니다. 여기서는 value 속성도 사용하려고했을 것입니다.

+0

예, 믿을 수 없을만큼 쉽게 그런 실수를합니다 ... –