Andrew,
Looking at the current code, it shouldn't throw that against a null
value. Maybe they've changed this since your version? Perhaps you could
try with the nightlies just to see if the same behavior happens?
RenderUtils
------------
public static String getConvertedStringValue(FacesContext context,
UIComponent component,
Converter converter, Object value) {
if (converter == null) {
if (value == null) {
return "";
}
else if (value instanceof String) {
return (String) value;
}
else {
throw new IllegalArgumentException(
"Value is no String (class=" +
value.getClass().getName() + ", value=" + value + ") and component "
+ component.getClientId(context) + "with path: "
+ getPathToComponent(component)
+ " does not have a Converter");
}
}
return converter.getAsString(context, component, value);
}
-----------
Maybe your version is missing the lines:
if (value == null) {
return "";
}
Regards,
Jeff Bischoff
Kenneth L Kurz & Associates, Inc.
Andrew Robinson wrote:
Yes that is correct, it was always null but only failed to render the
3rd request.
On 11/29/06, Jeff Bischoff <[EMAIL PROTECTED]> wrote:
Well the reason it doesn't work is because of the null.
Are you saying it was set to null the whole time, and only failed on the
3rd request (after having canceled the dialog once)?
Regards,
Jeff Bischoff
Kenneth L Kurz & Associates, Inc.
Andrew Robinson wrote:
> Found a work around -->
> if "value.typeText" is set to one of the values instead of null I
> don't get the exception. What I don't understand is why it works the
> other times but not the 3rd AJAX call.
>
> On 11/29/06, Andrew Robinson <[EMAIL PROTECTED]> wrote:
>> I am getting a bit stuck on this one exception. I have two
>> selectOneRadio components within an included facelet (source file)
>> that bind to a property on a facelet attribute. The value is a custom
>> bean with string properties and the select items have string values,
>> so no converter should be needed. What is odd is that this behavior is
>> not constant.
>>
>> Setup:
>> index.xhtml defines this component:
>> <ost:liveReportFilterDialog
>> id="liveReportFilterDlg"
>> ajaxZone="reportListZone"
>> rendered="#{liveReportBean.filterDialogVisible}"
>> onAcceptListener="#{liveReportBean.filterDialogAccepted}"
>> onCancelListener="#{liveReportBean.filterDialogCanceled}"
>> value="#{liveReportBean.filter}" />
>>
>> It is this "value" that I use within the
"liveReportFilterDialog.xhtml":
>>
>> <t:selectOneRadio
>> id="#{id}TypeOptions"
>> value="#{value.typeText}"
>> layout="pageDirection"
>> required="true">
>> <f:selectItem
>> itemLabel="#{msg.liverep_filterdlg_typefilter_graph}"
>> itemValue="osoft/livechart" />
>> <f:selectItem
>> itemLabel="#{msg.liverep_filterdlg_typefilter_report}"
>> itemValue="osoft/livereport" />
>> <f:selectItem
>> itemLabel="#{msg.liverep_filterdlg_typefilter_schedule}"
>> itemValue="osoft/liveschedule" />
>> </t:selectOneRadio>
>>
>> The other radio is:
>>
>> <t:selectOneRadio value="#{value.ownerStr}"
>> layout="pageDirection">
>> <f:selectItem itemLabel="#{msg.liverep_filterdlg_item_all}"
>> itemValue="ALL" />
>> <f:selectItem itemLabel="#{msg.liverep_filterdlg_item_owner}"
>> itemValue="CURRENT_USER" />
>> </t:selectOneRadio>
>>
>>
>> This dialog is usually not rendered, I change the value that the
>> rendered attribte points to in an AJAX call ActionListener method.
>> When I click the show, it works. Then, I click the cancel (close the
>> dialog), still okay, but when I try to open the dialog again (3rd AJAX
>> call) I get the following exception:
>> java.lang.IllegalArgumentException: Value is no String
>> (class=org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils$1,
>>
[EMAIL PROTECTED])
>>
>> and component
>>
zfpPanel:liveReportFilterDlgDialogControl:_gridBagPanelID_3:liveReportFilterDlgTypeOptionswith
>>
>> path: {Component-Path : [Class:
>> javax.faces.component.UIViewRoot,ViewId:
>> /pages/liveReport/index.xhtml][Class:
>> javax.faces.component.html.HtmlForm,Id: zfpForm][Class:
>> com.outlooksoft.cpm.faces.controls.HtmlGridBagPanel,Id:
>> zfpPanel][Class:
>> com.outlooksoft.cpm.faces.controls.HtmlGridBagCell,Id:
>> zfpContentCell][Class:
>> com.outlooksoft.cpm.faces.controls.UIAjaxZone,Id: zfpBodyZone][Class:
>> com.outlooksoft.cpm.livereport.controls.HtmlReportFilterDialog,Id:
>> liveReportFilterDlg][Class:
>> com.outlooksoft.cpm.faces.controls.UIDialog,Id:
>> liveReportFilterDlgDialogControl][Class:
>> com.outlooksoft.cpm.faces.controls.HtmlGridBagPanel,Id:
>> _gridBagPanelID_3][Class:
>> com.outlooksoft.cpm.faces.controls.HtmlGridBagCell,Id:
>> _gridBagCellID_29][Class:
>> org.apache.myfaces.component.html.ext.HtmlSelectOneRadio,Id:
>> liveReportFilterDlgTypeOptions]} does not have a Converter
>> at
>>
org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:536)
>>
>> at
>>
org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRadioRendererBase.encodeEnd(HtmlRadioRendererBase.java:93)
>>
>> at
>>
org.apache.myfaces.renderkit.html.ext.HtmlRadioRenderer.encodeEnd(HtmlRadioRenderer.java:71)
>>
>> at
>>
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:536)
>> at
>>
org.ajaxanywhere.jsf.ZoneUIComponent.renderComponent(ZoneUIComponent.java:90)
>>
>> ...
>>
>> The "ownerStr" is "ALL" and the "typeText" is null. I have been unable
>> to determine why it fails on this 3rd call and not 1 or 2. If I
>> refresh the page, the dialog is rendered & shown fine. I verified that
>> it isn't a problem with the message bundle (msg), as it still happens
>> if I hard code the itemLabel values.
>>
>> I am on a 1.1.3 patched version of both Tomahawk and Core.
>>
>> Any ideas? (also, I haven't yet found the RendererUtils$1 anonymous
>> class yet to find where it is coming from)
>>
>> Thanks,
>> -Andrew
>>
>
>
>