JavaFX fxml "fx:id" 属性的有效字符是什么?
What are the valid characters for a JavaFX fxml "fx:id" attribute?
这在某处有记录吗?它是标准 XML 准则吗?
我可以在 SceneBuilder 中分配 fx:id="table$abc",但是 "table>abc" 出错了。
在 FXMLLoader 的源代码中有一个方法 processAttribute(...)
到 "uumh" 处理 fx:id
、fx:controller
等属性。验证 fx:id 的代码是:
if ( localName.equals( FX_ID_ATTRIBUTE ) )
{
// Verify that ID is a valid identifier
if ( value.equals( NULL_KEYWORD ) )
{
throw constructLoadException( "Invalid identifier." );
}
for ( int i = 0, n = value.length(); i < n; i++ )
{
if ( !Character.isJavaIdentifierPart( value.charAt( i ) ) )
{
throw constructLoadException( "Invalid identifier." );
}
}
fx_id = value;
}
所以 fx:id
中的每个字符都用 Character.isJavaIdentifierPart()
检查。
Character.isJavaIdentifierPart('$'); // returns true
Character.isJavaIdentifierPart('>'); // returns false
因此使用 >
字符将抛出 LoadException
,而 $
则不会。
可能不存在有效 fx:id 名称的文档,但至少阅读 Character.isJavaIdentifierPart()
的 javadoc 会给你一些见解。
这在某处有记录吗?它是标准 XML 准则吗?
我可以在 SceneBuilder 中分配 fx:id="table$abc",但是 "table>abc" 出错了。
在 FXMLLoader 的源代码中有一个方法 processAttribute(...)
到 "uumh" 处理 fx:id
、fx:controller
等属性。验证 fx:id 的代码是:
if ( localName.equals( FX_ID_ATTRIBUTE ) )
{
// Verify that ID is a valid identifier
if ( value.equals( NULL_KEYWORD ) )
{
throw constructLoadException( "Invalid identifier." );
}
for ( int i = 0, n = value.length(); i < n; i++ )
{
if ( !Character.isJavaIdentifierPart( value.charAt( i ) ) )
{
throw constructLoadException( "Invalid identifier." );
}
}
fx_id = value;
}
所以 fx:id
中的每个字符都用 Character.isJavaIdentifierPart()
检查。
Character.isJavaIdentifierPart('$'); // returns true
Character.isJavaIdentifierPart('>'); // returns false
因此使用 >
字符将抛出 LoadException
,而 $
则不会。
可能不存在有效 fx:id 名称的文档,但至少阅读 Character.isJavaIdentifierPart()
的 javadoc 会给你一些见解。