Here is the start of my JSF file:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ace="http://www.icefaces.org/icefaces/components"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
</h:head>
<h:body>
However, http://www.icefaces.org/icefaces/components
and http://java.sun.com/jsp/jstl/core
are highlighted in red with error URI is not registered
. This causes many other subsequent tags to appear in red with errors element 'x' is not allowed here
. Here is an image showing what I mean:
When searching for a solution, it appeared some others with the same problem solved it by doing "Fetch External Resource". However, this didn't work for me. For the icefaces xmlns xmlns:ace="http://www.icefaces.org/icefaces/components"
I get the error: Error while fetching http://www.icefaces.org/icefaces/components
. And for the jstl xmlns xmlns:c="http://java.sun.com/jsp/jstl/core"
I get the error: No XML at the location: http://java.sun.com/jsp/jstl/core
.
I also found some people solved it by deleting the IntelliJ IDEA metadata file workspace.xml
in the .idea
directory. This does seem to work temporarily... but then it seems the problem comes back after a while. I also have to reconfigure several project settings which I would like to avoid.
Any help would be appreciated.. I'm not really familiar with the xmlns stuff and still a beginner to web app development. Thank you!
As per Mark Vedder's answer, I manually added external resources to my project and the problem has not resurfaced thus far.
With unregistered resources, the first solution is to use the "Fetch External Resource" quickfix. If that fails, as it has for you in this case, (usually because the "location" is in name only) you need to manually configure it.
To Manually Configure
.xsd
, .dtd
, etc.) exists in one of your library jars, skip to step 2. Otherwise, download a copy of the resource. Put it somewhere convenient on your system. Schemas
tab and select the resource from the appropriate jar. If you downloaded it, select the Explorer
tab (may be named Finder in Mac) and navigate to and select the file you downloaded.To Edit or Set via IDE Settings
Project Settings
section, find the Schemas and DTDs
node.Schemas
tab, or your file system via the Explorer
tab.UPDATE
The various JSF Taglib definitions (for JSF 2.x and above) can be found in the com/sun/faces/metadata/taglib
directory of the com.sun.faces:jsf-impl
jar. The jsf-impl
JAR file can be downloaded from maven central among other places.
I tried every thing suggested here to get intellij to recognize the correct version of my jsf. At the end I discovered that I didn't have a direct reference in my web project maven dependencies to jsf-api. In other words, adding
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.29-08</version>
<scope>provided</scope>
</dependency>
to my pom, fixed it. The confusing thing is that intellij was able to resolve a subset of the jsf symbols, which makes you think that the jar was being seen by it, albeit a wrong version of the jar.
A probable issue could be that the "Java EE: Java Server Faces" plugin is disabled. You can enable it by browsing to Settings > Plugins and on the Installed tab search for Java Server Faces.
In IntellijIDEA 2022 we need to add Plugin Jakarta EE: ServerFaces(JSF)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With