나는 심 웹 응용 프로그램이 하나 개의 페이지에 대해 내가 가진 하드 코딩 매개 변수와 같은 :심 이상한 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 코드가 호출되지 않습니다 ...
음, 흥미로운 질문 인 것 같지만 문제를 재현 할 수없는 것 같습니다. 매개 변수 정의와 링크가 무죄로 보인다. 관련된 세 가지 소스 파일 (호출자, 수신자, 리턴 페이지)의 버전을 모두 삭제하는 등 더 많은 컨텍스트를 제공해야합니다. –
@Mpi 도움을 주셔서 감사합니다. 내 게시물을 몇 가지 코드로 업데이트했습니다.만약 당신이 뭔가를 찾으면 알려주세요 ... 나를 위해 매우 도움이 될 것입니다 ... –